これは奇妙な問題です。私はさまざまな回避策やバグ修正を試みています。しかし、私はこれにかなりの時間を費やしました。新鮮な目で誰かがこの問題の根本的な原因を潜在的に突き止めることができるように願っています。なぜNSArrayはNSDictonariesの数に従って反復するのですか
基本的には、NSArrayとしてJSONファイルをシリアル化しています。私はこのデータでいくつかの操作を行う必要があるので、私は元のNSArrayのNSMutableArrayを作成します。
次に、NSDictonaryを作成し、objectForKeyを比較します。
しかし、XcodeコンソールでNSLog文を出力すると、Arrayは辞書の数だけ反復されています。なぜこの印刷は、30の辞書でそれぞれ30の配列に出るのですか?
ここには、この問題に関連するコードがいくつかあります。あなたの考えが何であるか、この修正を改善するために私ができることを教えてください。
self.objectsList = [[NSArray alloc] init];
[[HTTPServices instance] getConnectabilityObject:^(NSArray * _Nullable dataArray, NSString * _Nullable errorMessage) {
if (dataArray) {
NSMutableArray *array = [[NSMutableArray alloc] init];
for (NSDictionary *dictonary in dataArray) {
ConnectabilityObject *object = [[ConnectabilityObject alloc] init];
object.ConnectabilityTitle = [dictonary objectForKey:@"ConnectabilityObjectTitle"];
object.ConnectabilityObjectType = [dictonary objectForKey:@"ConnectabilityObjectType"];
object.ConnectabilityFullIPAddress = [dictonary objectForKey:@"ConnectabilityObjectFullIPAddress"];
object.ConnectabilityObjectLastOctet = [dictonary objectForKey:@"ConnectabilityObjectLastOctet"];
object.ConnectabilityObjectPortNumberOne = [dictonary objectForKey:@"ConnectabilityObjectPortNum1"];
object.ConnectabilityObjectPortNumberTwo = [dictonary objectForKey:@"ConnectabilityObjectPortNum2"];
object.ConnectabilityObjectPortNumberThree = [dictonary objectForKey:@"ConnectabilityObjectPortNum3"];
[array addObject:object];
}
self.objectsList = array;
}
}];
UPDATE
ここで、この配列と会合するNSLogStatementです。私は別の方法からこのデータを記録しています。この方法は以下にあります。ここ
-(void)pingResult:(NSNumber*)success {
NSMutableArray *objects = [NSMutableArray arrayWithArray:_objectlist];
for (NSDictionary *objectDictonary in objects) {
self.objectlist = nil;
NSLog(@"Another Method NSLog %@", objects);
}
}
のNSLogはコンソールからのものです。この「Another Method NSLog」はJSONファイルにあるConnectabilityObjectsの数に等しい30回と呼ばれます。
2016-06-14 11:28:55.724 FlightPath[3866:1176806] Another Method NSLog (
"<ConnectabilityObject: 0x16695d80>",
"<ConnectabilityObject: 0x16696ad0>",
"<ConnectabilityObject: 0x16696b90>",
"<ConnectabilityObject: 0x16696be0>",
"<ConnectabilityObject: 0x16696c30>",
"<ConnectabilityObject: 0x16696ca0>",
"<ConnectabilityObject: 0x16696cf0>",
"<ConnectabilityObject: 0x165b14e0>",
"<ConnectabilityObject: 0x165b1530>",
"<ConnectabilityObject: 0x165b15c0>",
"<ConnectabilityObject: 0x165b1610>",
"<ConnectabilityObject: 0x165b1660>",
"<ConnectabilityObject: 0x165b16b0>",
"<ConnectabilityObject: 0x165b1700>",
"<ConnectabilityObject: 0x165b1750>",
"<ConnectabilityObject: 0x165b17a0>",
"<ConnectabilityObject: 0x165b17f0>",
"<ConnectabilityObject: 0x165b18b0>",
"<ConnectabilityObject: 0x165b1900>",
"<ConnectabilityObject: 0x16696d20>",
"<ConnectabilityObject: 0x16696d50>",
"<ConnectabilityObject: 0x16696da0>",
"<ConnectabilityObject: 0x16696df0>",
"<ConnectabilityObject: 0x16696e40>",
"<ConnectabilityObject: 0x16696e90>",
"<ConnectabilityObject: 0x16696ee0>",
"<ConnectabilityObject: 0x16696f30>",
"<ConnectabilityObject: 0x16696f80>",
"<ConnectabilityObject: 0x16696fd0>",
"<ConnectabilityObject: 0x166970e0>"
)
2016-06-14 11:28:55.729 FlightPath[3866:1176806] Another Method NSLog (
"<ConnectabilityObject: 0x16695d80>",
"<ConnectabilityObject: 0x16696ad0>",
"<ConnectabilityObject: 0x16696b90>",
"<ConnectabilityObject: 0x16696be0>",
"<ConnectabilityObject: 0x16696c30>",
"<ConnectabilityObject: 0x16696ca0>",
"<ConnectabilityObject: 0x16696cf0>",
"<ConnectabilityObject: 0x165b14e0>",
"<ConnectabilityObject: 0x165b1530>",
"<ConnectabilityObject: 0x165b15c0>",
"<ConnectabilityObject: 0x165b1610>",
"<ConnectabilityObject: 0x165b1660>",
"<ConnectabilityObject: 0x165b16b0>",
"<ConnectabilityObject: 0x165b1700>",
"<ConnectabilityObject: 0x165b1750>",
"<ConnectabilityObject: 0x165b17a0>",
"<ConnectabilityObject: 0x165b17f0>",
"<ConnectabilityObject: 0x165b18b0>",
"<ConnectabilityObject: 0x165b1900>",
"<ConnectabilityObject: 0x16696d20>",
"<ConnectabilityObject: 0x16696d50>",
"<ConnectabilityObject: 0x16696da0>",
"<ConnectabilityObject: 0x16696df0>",
"<ConnectabilityObject: 0x16696e40>",
"<ConnectabilityObject: 0x16696e90>",
"<ConnectabilityObject: 0x16696ee0>",
"<ConnectabilityObject: 0x16696f30>",
"<ConnectabilityObject: 0x16696f80>",
"<ConnectabilityObject: 0x16696fd0>",
"<ConnectabilityObject: 0x166970e0>"
)
不明です。あなたは 'forループ'を持ち、あなたのコードはコンパイルすべきではありません。 '[array addObject:object];' 'object'が宣言されていないところで行います。 – Larme
驚くべきNSLog出力に関する質問には、少なくとも1つのNSLogステートメントが含まれている必要があります。 – danh
@Larmeのように、 'ConnectabilityObject *オブジェクト 'がスコープに含まれないので、' [array addObject:object] 'はこのコードに基づいてコンパイルすべきではないことを、' object'という名前の変数がないことを確認してくださいその時点で。 – Wyatt