我正在为教师创建一个应用程序,用于存储课程和学生以及跟踪成绩。现在它设置在一个数据模型中,该模型将课程存储在一个数组中。课程是包含一系列学生和作业的对象。我有一个所有课程的表格视图,可以转换为学生的桌面视图。在课程详细信息视图中,我有一个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];
}
}
答案 0 :(得分:2)
您存储在assignments
属性中的对象是NSArray
的实例,它是不可变的。您需要将其作为NSMutableArray
的实例。这就是addObject:
是一个无法识别的选择器的原因 - 它是NSMutableArray
中存在但不在NSArray
中的方法,而您的代码将其发送到NSArray
的实例。< / p>