0

2 つの NSMutableArray にオブジェクトを追加するのに問題があります。データはデータベースから取得され、NSLog を使用すると有効な出力が得られるため、解析が正しいことがわかります。ただし、2 つの異なるオブジェクトを 2 つの異なる NSMutableArray に追加する方法がわかりません。これが私のコードです

-(void)connectionDidFinishLoading:(NSURLConnection *)connection {

     allDataDictionary = [NSJSONSerialization JSONObjectWithData:webData options:0 error:nil];
     feed = [allDataDictionary objectForKey:@"feed"];
     arrayOfEntry = [feed objectForKey:@"entry"];

     for (NSDictionary *dictionary in arrayOfEntry) {

         NSDictionary *title = [dictionary objectForKey:@"title"];
         NSString     *labelTitle = [title objectForKey:@"label"];

         [arrayLabel addObject:labelTitle];

         NSDictionary *summary = [dictionary objectForKey:@"summary"];
         NSString     *labelSummary = [summary objectForKey:@"label"]; 

         [arraySummary addObject:labelSummary]; //This line makes the application crash

     }

}

何らかの理由で、labelSummary を arraySummary に追加しようとすると、次のエラーが発生します。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

どんな助けでも大歓迎です。

4

2 に答える 2

2

あなたの構文解析は確かに正しいです。ただし、パーサーが空のフィールドに遭遇すると、nilを返します。問題は、nilはオブジェクトではないため、NSArrayがnilsを受け入れられないことです。これは、0と同等です。したがって、ほとんどの場合、オブジェクトを追加します。これはNSNullの役割です。

パーサーがnilを返すかどうかをテストする必要があり、返される場合は[NSNullnull]を追加します。

NSString* labelSummary = [summary objectForKey:@"label"]; 

[arraySummary addObject:(labelSummary!=nil)?labelSummary:[NSNull null];
于 2013-03-05T19:03:30.263 に答える
1

エラー メッセージは、配列に追加しようとしているオブジェクトの 1 つが nil であることを示しています。

交換する必要があります

[arrayLabel addObject:labelTitle];

if (labelTitle != nil) {
   [arrayLabel addObject:labelTitle];
}

[arraySummary addObject:labelSummary];

if (labelSummary != nil) {
   [arraySummary addObject:labelSummary];
}

本当に nil オブジェクトを含める必要がある場合は、NSNull を使用してください。

于 2013-03-05T19:07:45.753 に答える