0

我正在过滤 aNSMutableArray以获取一个对象(NSDictionary),然后我想在原始 中获取该对象的索引NSMutableArray。但不知何故,给出的索引是2147483647当该数组中只有 5 个项目时。

谁能指出我如何在其原始数组中获取获取的对象的索引?

predicate = [NSPredicate predicateWithFormat:@"data.resourceID == %@",addEvents[@"resourceID"]];
                result = [appDataMutable filteredArrayUsingPredicate:predicate];
                NSLog(@"%i",[appDataMutable indexOfObject:result]);
//...
 [appDataMutable replaceObjectAtIndex:[appDataMutable indexOfObject:result] withObject:resultDictionary]'
4

2 回答 2

3

当在数组中找不到对象时,indexOfObject:返回NSNotFound,定义为

enum {NSNotFound = NSIntegerMax};

NSIntegerMax0x7fffffff,即 2147483647。

于 2013-10-05T16:39:52.393 回答
0
result = [appDataMutable filteredArrayUsingPredicate:predicate];
NSLog(@"%i",[appDataMutable indexOfObject:result]);

filteredArrayUsingPredicate:不从起始数组返回某个对象;它返回另一个数组,包含原始数组中的零个或多个对象(即与谓词匹配的对象)。

该数组包含原始数组中的一些(或不包含)对象;它不会被添加到原始数组中,以前也不存在,因此它不是原始数组中的对象之一。

因此,向原始数组询问其indexOfObject:过滤后的数组将为您提供 的结果NSNotFound,这就是您所看到的。

正如凯文在对他的回答的评论中提到的那样,解决方案是检查结果数组是否为空(检查它的count),然后使用该数组中的对象。

后记

如果您希望结果数组中只有一个对象,您可能应该断言该条件,如果不是这种情况,则会引发异常。(您选择是否要断言数组的计数正好是1 或小于或等于 1。

如果你想处理多个匹配的情况,你可能应该使用enumerateObjectsUsingBlock:,为每个匹配自己评估谓词。

于 2013-10-06T00:26:42.570 回答