2012-03-29 17 views
0

私はコースや学生を保存し、成績を把握する先生向けのアプリケーションを作成しています。今は、コースを配列に格納するデータモデルに設定されています。コースは、学生と課題の配列を含むオブジェクトです。私は学生のテーブルビューに移行するすべてのコースのテーブルビューを持っています。コース詳細ビューでは、私は割り当てのための3番目のテーブルビューに移行する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

'[self.checklist.assignments addObject:item];'で使用する代入オブジェクトを宣言して作成するにはどうすればいいですか? –

+0

"Assignment"オブジェクトは、2つの文字列とIDを含むクラスとして宣言され、構築されます。代入の配列は、NSMutable配列としてCourseオブジェクトの一部として宣言されます。 – user1170015

+0

割り当て配列を初期化する場所はどのようなコードですか?また、実際の行によってエラーが発生しているかどうかを確認してコードをデバッグすることをお勧めします。私はそれがあなたが 'addObject'を表示する唯一の場所だから、上に引用したものだと思っていますが、確かに知っているといいでしょう。 –

答えて

2

あなたがあるassignmentsプロパティに格納されてきたオブジェクトNSArrayのインスタンスです。これは不変です。代わりにNSMutableArrayのインスタンスにする必要があります。それはaddObject:が認識できないセレクタである理由です。NSMutableArrayに存在し、NSArrayには存在しないメソッドであり、コードはNSArrayのインスタンスに送信しています。

+0

参照してください、しかし、私は '代入'がNSMutable配列であると宣言しました。私はあなたが私に言っていることを理解していないかもしれないような気分です。私が課題に格納しようとしているオブジェクトは単なるオブジェクトです。 NSMutable配列として宣言して初期化した配列がなぜ受け入れられないのでしょうか? – user1170015

+0

@ user1170015 'assignments'は*配列を含むプロパティです。あなたのプログラムのある時点では、配列を 'assignments'プロパティに格納しなければなりません。さもなければ、その値はnilになります。プロパティの値を設定するために使用したオブジェクトは、 'NSArray'のインスタンスでした。おそらく、それ以外の場合はその問題を警告するコンパイラの警告を無視しています。 – jlehr

関連する問題