发送到实例的选择器无效

时间:2012-03-29 01:08:49

标签: objective-c

我正在为教师创建一个应用程序,用于存储课程和学生以及跟踪成绩。现在它设置在一个数据模型中,该模型将课程存储在一个数组中。课程是包含一系列学生和作业的对象。我有一个所有课程的表格视图,可以转换为学生的桌面视图。在课程详细信息视图中,我有一个tableview单元格,可转换为作业的第三个表格视图。我的问题在这里发生。当我尝试向tableview添加赋值时,我收到错误:'NSInvalidArgumentException',原因:' - [__ NSArrayI addObject:]:无法识别的选择器发送到实例0x6b38620'..

以下是我认为可能包含问题的一些代码。

课程详情视图控制器:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"AssignmentTable"]) {

    AssignmentViewController *controller = segue.destinationViewController;
    controller.checklist = checklistToEdit;

}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row == 2)
    {
    [self performSegueWithIdentifier:@"AssignmentTable" sender:checklistToEdit];


    }
}

分配视图控制器:

- (void)editAssignmentViewController:(EditAssignmentViewController *)controller     didFinishAddingItem:(Assignment *)item
{
int newRowIndex = [self.checklist.assignments count];

[self.checklist.assignments addObject:item];

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:newRowIndex inSection:0];
NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];


[self dismissViewControllerAnimated:YES completion:nil];
}

分配详细信息视图控制器:

- (IBAction)done
{
if (assnToEdit == nil) {
    Assignment *item = [[Assignment alloc] init];
    item.texta = self.textFielda.text;

    [self.delegate editAssignmentViewController:self didFinishAddingItem:item];


} else {
    self.assnToEdit.texta = self.textFielda.text;

    [self.delegate editAssignmentViewControllerDidCancel:self]; 
}

}

1 个答案:

答案 0 :(得分:2)

您存储在assignments属性中的对象是NSArray的实例,它是不可变的。您需要将其作为NSMutableArray的实例。这就是addObject:是一个无法识别的选择器的原因 - 它是NSMutableArray中存在但不在NSArray中的方法,而您的代码将其发送到NSArray的实例。< / p>