0

私は2つのView Controllerを持っています。1 つは、ユーザーが選択基準に一致する行のリストを表示する searchResults テーブルビュー コントローラー (VC1) と、ユーザーが VC1 の選択された行の詳細を表示するもう 1 つの ViewDetail (テーブルビュー コントローラー) (VC2) です。VC2 の関連するプロパティを設定することにより、VC1 の prepareforsegue メソッドで、選択した行の詳細をフェッチするために必要な情報が managedContext 参照と共に VC1 から VC2 に渡されます。テスト中に、VC1 の別の行を選択するたびに (ナビゲーション コントローラーの [戻る] ボタンを使用して) VC1 と VC2 を切り替えて、別の項目の詳細を表示しました。これは 7 ~ 15 回の切り替えで正常に機能しますが、切り替えを数回試みると突然クラッシュします。私はできる限りこれを調査しましたが、解決策がないため、これを投稿しました。助けてください。エラーは、特定の配列がインデックス 0 の範囲外であるということです。しかし、私は理解していますが、フェッチ要求の結果によって移入されるこの配列が空になるとは思っていません。したがって、管理コンテキストに問題があると思われます。VC2 からのコードのスニペットが提供されます

//All this is in  ViewDidLoad of VC2 App crashes at the last line of this snippet. trying to get an object at index 0 which is non existent but should not be ...
NSFetchRequest *request  = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@" cameraid ==  %@",(NSNumber *)self.selectedCameraid];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Cameras"
                                          inManagedObjectContext:self.managedContext];

//Configure core data request
[request setEntity:entity];
[request setPredicate:predicate];

//Execute request
NSError *error = nil;

NSMutableArray *mutableFetchResults =  [[self.managedContext executeFetchRequest:request error:&error] mutableCopy];

if (mutableFetchResults == nil) {
    // Handle the error.
    NSLog(@"Some error in fetching results");

}
NSLog(@"Mutable fetch results data %@",mutableFetchResults);
self.resultsArray = mutableFetchResults;
Cameras *rowdata = [self.resultsArray objectAtIndex:0]; //Cameras is a managed object
4

1 に答える 1

0

さらに掘り下げた後、問題が見つかりました...上記のコードでは、文字列を NSNumber (NSNumber *)self.selectedCameraid として型キャストしています。どうやらこれがクラッシュの原因となっているようです。NSNumberformatter を使用して NSString オブジェクトを NSNumber オブジェクトに変換しましたが、すべて正常に動作しているようです。この方法でキャスト オブジェクトを型付けするのは安全ではないことに気付きました。

于 2013-01-03T20:05:31.440 に答える