0 foreach cocoa objective-c nsarray
将plist加载到NSArray后,我试图访问其嵌套数组.
NSArray *tree = [[NSArray alloc] initWithContentsOfFile:path];
for (NSArray *a in tree)
{
//Let's assume object at index 0 is always NSString
NSLog(@"Returning the string: %@ ", [a objectAtIndex:0]);
}
Run Code Online (Sandbox Code Playgroud)
调试器中的一些值:
tree __NSCFArray * 0x6856cf0
0 __NSCFString * 0x6818b70
1 __NSCFString * 0x682be10
2 __NSCFArray * 0x6856cd0
Run Code Online (Sandbox Code Playgroud)
所以我期待for语句跳过前两个NSStrings然后用NSArray执行.
然而步进一行:__ NSCFString*0x6818b70
繁荣,appcrash.
提示?
所以我期待for语句跳过前两个NSStrings然后用NSArray执行.
这不是for (NSArray *a in tree)
表达式的作用.该语句创建一个名为a
type 的局部变量NSArray *
,并将其指定为引用每个对象tree
,而不管特定索引处的对象是否为NSArray.
您的快速枚举循环大致相当于:
NSArray *a;
for (NSInteger index = 0; index < [tree count]; index++) {
a = [tree objectAtIndex:index];
...
}
Run Code Online (Sandbox Code Playgroud)
正如Jonah已经指出的那样,只是告诉编译器你期望NSArray
它实际上并不是一个.如果要跳过循环中不是数组的对象,可以按如下方式执行:
for (NSArray *a in tree) {
if (![a isKindOfClass:[NSArray class]]) continue;
//...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
176 次 |
最近记录: |