我有最新的xcode是xcode 4.6,并且遇到了这个问题:
NSArray *array = @[@[@"a",@"b"]];
NSLog(@"%d", array[0].count);
在我运行它之前,xcode告诉我“在'id'类型的对象上找不到”属性'计数'。
但如果我将其改为
NSLog(@"%d", [array[0] count]);
然后,一切都很好。
所以我的问题是,为什么不能obj-c处理 two_d_array [index] .count ?
答案 0 :(得分:3)
查看NSArray
的文档。没有count
属性。事实上,NSArray
没有任何属性。
当您使用非属性方法的属性语法时,如果您有一个特定类型的对象并且有一个相同名称的方法,编译器将处理它。但在这种情况下,你有一个id
。因此编译器无法安全地确定您访问count
属性的尝试应该转换为对count
方法的调用。
答案 1 :(得分:0)
你可以通过类型转换来解决这个问题:NSLog(@"%d", ((NSArray*)array[0]).count);
。 XCode将允许您调用您的对象不会响应的方法,因为它认为您知道自己在做什么。但是,如果找不到该属性,则会出错。