2016-06-14 9 views
0

これは奇妙な問題です。私はさまざまな回避策やバグ修正を試みています。しかし、私はこれにかなりの時間を費やしました。新鮮な目で誰かがこの問題の根本的な原因を潜在的に突き止めることができるように願っています。なぜ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>" 
) 
+1

不明です。あなたは 'forループ'を持ち、あなたのコードはコンパイルすべきではありません。 '[array addObject:object];' 'object'が宣言されていないところで行います。 – Larme

+4

驚くべきNSLog出力に関する質問には、少なくとも1つのNSLogステートメントが含まれている必要があります。 – danh

+0

@Larmeのように、 'ConnectabilityObject *オブジェクト 'がスコープに含まれないので、' [array addObject:object] 'はこのコードに基づいてコンパイルすべきではないことを、' object'という名前の変数がないことを確認してくださいその時点で。 – Wyatt

答えて

1

これは、OPコードがこれをやっていた最初の試みで、

-(void)pingResult:(NSNumber*)success { 
    for (NSDictionary *objectDictonary in _objectlist) { 
     NSLog(@"%@", objectDictonary); 
    } 
} 

...のNSLog間違いです:不インスタンスの配列VARをコピーし

NSMutableArray *objects = [NSMutableArray arrayWithArray:_objectlist]; 

...。危険なあなたが検査しようとしているインスタンスの配列を削除

self.objectlist = nil; 

...:

そして、OPコードがこれをやっていました。

そして、紛らわしい出力を生成し、OPコードは、このやっていた:

NSLog(@"Another Method NSLog %@", objects); 

を...言う:「私の配列の各要素のために、私の全体の配列をログ」。

+0

ありがとうございました!あなたは私の思考プロセスに火をつけました。あなたは正しくこれを記録していました。私はあなたの答えを正しかったとマークしました。ありがとうございました!! –

関連する問題