我有一个对象数组,我可以将它们打印出来,所以我知道它们存在。
我遇到的问题是我无法访问对象的变量。
e.g。
// This prints out correctly
NSLog(@"asset frame in select mode is at index:%d is %@", i, [[AssetsSingleton sharedMySingleton].assetFrames objectAtIndex:i]);
此打印件
选择模式下的资产框架是索引:0是 资产:0x8087040; frame =(4 2; 75 75); layer = CALayer:0x808bd00>>
我有资产的成员变量如下
UIImageView *overlayView;
BOOL selected;
id parent;
问题是我无法访问这些例如overlayView使用
[[AssetsSingleton sharedMySingleton].assetFrames objectAtIndex:i].overlayView.hidden = TRUE;
我如何访问这些成员?打印输出似乎表明该数组拥有资产。
答案 0 :(得分:7)
在使用其属性之前,将对象强制转换或赋值给变量:
Foo *foo = [myArray objectAtIndex:12345];
foo.bar = 67890;
或者:
((Foo *)[myArray objectAtIndex:12345]).bar = 67890;
只有当编译器知道对象的类型时,属性才可用。
答案 1 :(得分:1)
你说你“无法访问这些” - 问题是什么?这是编译器错误吗?什么错误?
假设您的错误是我认为的错误:
NSArray(以及类似的类,如NSDictionary)保存对象 - NSObject。因此,在将它们作为该类型访问之前,必须将它们转换为实际类型。
尝试以下方法:
Asset *asset = (Asset*)[[AssetsSingleton sharedMySingleton].assetFrames objectAtIndex:i];
asset.overlayView.hidden = TRUE;
答案 2 :(得分:1)
您是否需要先将数组项目转换为资产?
((Asset*)[[AssetsSingleton sharedMySingleton].assetFrames objectAtIndex:i]).overlayView.hidden = TRUE;