- 我在Obj-C中有这个错误,这是因为程序试图访问一个不存在的NSArray密钥
- 通常在我的PHP程序中,我会在使用array_key_exists(NEEDLE,HAYSTACK(之前验证密钥是否存在
- 这两个函数在Cocoa/Oj-C中是否有等价物?如果没有,你将如何创建它们
- 我对array_key_exists((的解决方案比对array_search((更感兴趣
在NSArray中,键只能是整数。因此,您可以简单地检查尝试访问的索引是否小于数组中的项数。您可以通过计数方法检查项目数量:
NSArray *array = ... some array ...
NSUInteger index = ... some index ...
if (index < [array count]) {
// It's safe to do [array objectAtIndex:index]
}
PHP"arrays"和Cocoa"arrays"不是一回事。
在Cocoa中,"数组"是一个平面的、有序的值集合。每个值在数组中的位置称为其索引。这与C"数组"的含义相同。
在PHP中,"数组"是一个关联数组,将键映射到值。另一个术语是dictionary,这就是Cocoa所说的:Cocoa的类是NSDictionary。
所以你想要的是NSDictionary,而不是NSArray。
array_key_exists
的对应项是objectForKey:
:如果字典中不存在密钥,则objectForKey:
返回nil
。
与array_search
相对应的是allKeysForObject:
。
在php中,array_key_exists表示"关联"数组或散列,或者Objective-C称之为"Dictionaries"。所以你应该使用:
NSDictionary或NSMutableDictionary
所以你可以这样做:
NSMutableDictionary *dItems = [NSMutableDictionary alloc] init] [[NSMutableDictionary alloc] init];
[dItems dItems: @"Key" forKey: @"Value"];
[dItems dItems: @"Key2" forKey: @"Value2"];
if ([dItems valueForKey: "Key"] != nil) {
// exists
}
NSDictionary比每次迭代一个数组要高效得多,并且有很多
您可以在以下位置找到有价值的功能:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html
您可能应该查看NSArray类引用的"在数组中查找对象"部分。
-indexOfObject:
或-indexOfObjectIdenticalTo:
可能是您想要的。
你试过吗
- (BOOL)containsObject:(id)anObject
更多详细信息,请点击此处