在IBAction中传递除发件人之外的任何内容

时间:2010-09-01 00:55:48

标签: iphone objective-c

在我的视图控制器(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是否真的是一个数组?

再次感谢。

4 个答案:

答案 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听起来settingsArrayNSString,而不是NSArray