Objective C无法处理2d数组.count?

时间:2013-05-18 17:20:47

标签: objective-c arrays

我有最新的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

2 个答案:

答案 0 :(得分:3)

查看NSArray的文档。没有count属性。事实上,NSArray没有任何属性。

当您使用非属性方法的属性语法时,如果您有一个特定类型的对象并且有一个相同名称的方法,编译器将处理它。但在这种情况下,你有一个id。因此编译器无法安全地确定您访问count属性的尝试应该转换为对count方法的调用。

答案 1 :(得分:0)

你可以通过类型转换来解决这个问题:NSLog(@"%d", ((NSArray*)array[0]).count);。 XCode将允许您调用您的对象不会响应的方法,因为它认为您知道自己在做什么。但是,如果找不到该属性,则会出错。