在我的视图控制器(viewDidLoad)中,我使用设置数据(来自存档)填充视图控制器头文件中定义的数组。我正在使用数组中的数据在视图中的按钮上写标签,到目前为止没问题。
我想通过IBAction传递数组的一个元素以添加到新的视图控制器。我一直在IBAction中收到错误
'NSInvalidArgumentException', reason: '-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x5d230f0').
以下是我的IBAction代码的相关部分:
-(IBAction)pushedTimer:(id)sender {
if (!timerViewController) {
timerViewController = [[TimerViewController alloc] init];
}
[timerViewController setPreset:[[settingsArray objectAtIndex:0] settingLength]];
[[self navigationController] pushViewController:timerViewController animated:YES];
}
我在想,既然数组可以通过其他方法访问,那么它也应该与IBAction一起使用?该错误让我相信IBAction无法确定settingsArray是否真的是一个数组?
再次感谢。
答案 0 :(得分:2)
我不确定,但这是我对这个常见问题的看法:
你的阵列已经存在了。这意味着您的数组在代码中的某处(通过调用release或autorelease)进行dealloc,然后将字符串分配到数组的相同内存区域。因此,当系统尝试调用该内存区域中的对象时,它将再次调用NSString对象而不是NSArray对象。
您应该仔细检查阵列的所有释放和自动释放
答案 1 :(得分:1)
在settingArray中的实例是否实现了settingLength?
这个问题本身就是一个答案。我的意思是实例应该实现settingLength。
答案 2 :(得分:1)
你是如何定义settingArray的?你在创建@property和@synthesizing吗?如果您不是,那么您无法在该对象的已分配实例中访问它,因此您的数组将为零。还要确保检查@alones所说的内容!
答案 3 :(得分:0)
-[NSCFString objectAtIndex:]: unrecognized selector sent
听起来settingsArray
是NSString
,而不是NSArray
。