0

私が見逃しているのは単純なものだと確信しているので、これは短くて甘いものにします。可変数のオブジェクト (ID 番号) を含むことができる NSMutableArray のカウントを取得しようとしています。配列は JSON データから作成されており、オブジェクトが 1 つであろうと数千であろうと、配列自体は完全に作成されています。

カウントの取得に関しては、配列に複数のオブジェクトが含まれている場合、すべてが正常に機能し、ダンディでカウントが正常に返されます。ただし、配列にオブジェクト/ID 番号が 1 つしかない場合、アプリは -[NSCFString count]: エラーでクラッシュします。

私が使用しているコードは次のとおりです。

[request setCompletionBlock:^(void)
 {
     NSString *responseCurrent = [request responseString];
     NSMutableArray *json = [responseCurrent JSONValue];
     NSMutableArray *currentList = [[json valueForKeyPath:@"groupTO"] valueForKeyPath:@"currentList"];

     NSMutableArray *idNumArr = [[NSMutableArray alloc]init];
     idNumArr = [currentList valueForKey:@"idNumber"];
     debug(@"THIS IS ID ARRAY:  %@",idNumArr);

     debug(@"THIS IS COUNT OF THE ID ARRAY:  %@",[idNumArr count]);

     //  Ive also tried this to get the count, with no variation in results

     //  int countOfidNums = [idNumArr count];
     //  debug(@"count of arr:  %d",countOfidNums); 

この配列にオブジェクトが 1 つしか含まれていない場合に発生する他の問題に対処するための条件を実装するには、このカウントを取得する必要があります。

この問題は、配列内のオブジェクトが文字列であり、単一のオブジェクトがある場合、それはコンマで区切られていない文字列として来ているという事実に起因していると思いますか??? 多分???ヘルプ!!!!

また、違いがあるかどうかはわかりませんが、ARCを使用しています。

4

3 に答える 3

2

ここでの問題は、その行に到達するとidNumArr、配列ではなく、文字列であるということです。信じられない場合は、[idNumArr class]その直前に印刷するか、デバッガーを使用してください。

 NSMutableArray *idNumArr = [[NSMutableArray alloc]init];
 idNumArr = [currentList valueForKey:@"idNumber"];

[currentList valueForKey:@"idNumber"]明らかに文字列を返しています(そして、その割り当ての直前に配列を割り当てる理由はありません。おそらく次のようにします。

 NSMutableArray *idNumArr = [[NSMutableArray alloc]init];
 [idNumArr addObject:[currentList valueForKey:@"idNumber"]];
于 2012-10-13T19:35:29.820 に答える
0
idNumArr = [currentList valueForKey:@"idNumber"];

この行では、currentListがNSStringを返していますが、「count」はNSStringのメソッドではありません(ここで確認できます:NSStringクラス参照

ここではポインタを使用していることに注意してください。「キーの値」はidポインタを返します(タイプは関連付けられていません)。したがって、「valueForKey」によって返されるオブジェクトが実際にNSArrayであるかどうかを確認する必要があります。

if([idNumArr isKindOfClass:[NSMutableArray class]])
//Then you can use "count"

注意:上記のコードはテストされておらず、構文チェックもされていないことを考慮に入れてください。ただし、そのメソッド「isKindOfClass」を検索して、idNumArr内で使用しているオブジェクトタイプを確認してください。

于 2012-10-13T19:35:34.000 に答える
0

問題は、idNumArrが実際には配列ではなく文字列であるということのようです。このようなログを追加して、何が得られるかを確認してください。

idNumArr = [currentList valueForKey:@"idNumber"];
NSLog(@"%@", idNumArr class]);

配列に文字列が1つしかないという事実は、この問題を引き起こさないはずです。

于 2012-10-13T19:35:42.717 に答える