質問

を使用しているNSFetchedResultsController管理の表示に戻管理オブジェクトは、テーブルビューワです。のテーブルから始まり空でユーザーが新規追加団体利用いただけるようになっているポートします。としてのプログラムは常に作品を追加した最初の企業で、常にクラッシュを追加しました。ありませんエラーの展示には、衝突などに誤りがあの異なる種類(一部含まれます。を通じてログ諸表とトレースいたように、これまでとは違った、プログラムの衝突直後にNSFetchResultsControllerの委譲のcontrollerWillChangeContent(通話[。tableView beginUpdates];)口方法、その他の方法で自分のコードが呼び出されます。ではさまざまなできごとがありまrelavant部品のコードです。設定のNSFetchedResultsController:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Beer"
                                    inManagedObjectContext:self.managedObjectContext]];

// Configure request's entity and predicate
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];

NSString *expression = [NSString stringWithFormat:@"brewery.name LIKE \"%@\"", self.brewery.name];
NSPredicate *predicate = [NSPredicate predicateWithFormat:expression];
[fetchRequest setPredicate:predicate];
self.resultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                             managedObjectContext:self.managedObjectContext
                                                               sectionNameKeyPath:nil
                                                                        cacheName:nil];
self.resultsController.delegate = self;
[fetchRequest release];

NSError *error = nil;
BOOL success = [resultsController performFetch:&error];
if (!success) {
    NSLog(@"Error fetching request %@", [error localizedDescription]);
}

新規追加者:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Beer" inManagedObjectContext:self.managedObjectContext];
Beer *beer = [[Beer alloc] initWithEntity:entity insertIntoManagedObjectContext:self.managedObjectContext];
beer.name = beerName;
beer.brewery = self.brewery;

れによっての注意事項などのドキュメント問題の表示を使ったテーブルの一部、またApple社の対処するに無い.の方法いくという前にクラッシュ。

の一部に誤っ受け:

Serious application error.  Exception was caught during Core Data change processing: *** -[NSCFString compareObject:toObject:]: unrecognized selector sent to instance 0x4e808c0 with userInfo (null)
Serious application error.  Exception was caught during Core Data change processing: *** -[CALayer compareObject:toObject:]: unrecognized selector sent to instance 0x4e53b80 with userInfo (null)
Serious application error.  Exception was caught during Core Data change processing: *** -[UITextTapRecognizer controllerWillChangeContent:]: unrecognized selector sent to instance 0x4ca5d70 with userInfo (null)
Serious application error.  Exception was caught during Core Data change processing: *** -[CALayer controllerWillChangeContent:]: unrecognized selector sent to instance 0x4e271a0 with userInfo (null)
Serious application error.  Exception was caught during Core Data change processing: *** -[NSCFNumber countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x4c96ee0 with userInfo (null)

ご覧のとおり、誤差が発表)と整合的ではないでもない場合の変更をコードします。

誰でもできるので何をいくつかは間違いだったのか?

役に立ちましたか?

解決

お矛盾誤差点での過リリース。特にその変更に委譲での再読み込みデータの問題を解決す。個人的には思投資の問題を解決するより符号化できあるコードの問題があることも示さ降らいしか採用できる場所はない。

私は次のように処理されます:

  1. On NSZombie
  2. 追加のためのブレークポイント objc_exception_throw
  3. のデバッガ

時に例外が発生し、メモリアドレスと照れているのではと考えていますアクセスすることができます。この分離の問題んでいるのかもしれません。で大きな希望を与えるとともにいる場合には、わからないの問題を NSFetchedResultsController 委譲方法でできる場合には何も不思議です。

ベスト更新の問題の追加情報です。

他のヒント

新しいエンティティを作成するために、あなたのコードはすべて奇妙です。何の代わりにこれを使用する方法についてます:

Beer* beer = [NSEntityDescription insertNewObjectForEntityForName: @"Beer" 
    inManagedObjectContext: self.managedObjectContext];
beer.name = @"Grolsch";

また、あなたがNSManagedObjectContext#save:を呼び出していません。しかし、多分あなたは今示したコードの一部でそれをやっていますか?

私は、この特定の問題を解決しませんでしたが、私は私が望む機能を与え、問題が発生することはありませんでしたクラスを書くにわずかに異なるアプローチを取りました。私はまだNSFetchedResultsControllerを使用していますが、むしろすべての4つのデリゲートメソッドを実装するよりも、私はちょうど呼び出すcontrollerDidChangeContent :, [のtableView reloadData]を実施しています。

これは、ストレージのためのコアデータを使用してXcodeで新しいナビゲーションベースのアプリケーションを作成する場合RootViewControllerクラスに含まれている実装です。あなたはおそらく、テーブル編集アニメーションの上にいくつかのコントロールを失うが、それは、の多くののシンプルな、私の目的のために正常に動作します。

私は最近、同様のバグがありました - あなたの問題は、特に、解放する上であります:

[sortDescriptors release];

あなたはsortDescriptorsは、

からオブジェクトを取得
[NSArray arrayWithObjects:sortDescriptor, nil];

それは自動解放オブジェクトを返しますので、「ALLOC」、「コピー」または「新」を、持っていません。 NSFetchRequestがそれを使用している場合、それは、プールで解放されたとき - あなたは早期にそれを解放するので、あなたがクラッシュする可能性が二つの場所を取得します。詳細は、Appleのメモリ管理ガイドを参照してください。 。

これは古いものですが、同じ問題を抱えて他人の利益のために、私は何が起こっていたか理解しようと時間を費やしてきたし、最終的にこれらのランダムなクラッシュを引き起こしていた私のソート記述子の問題を発見しました。

のエラーメッセージが変化しなくcompareObjectにほとんど関連していた:以下の通りtoObjectセレクタ

- [_ NSCFSet compareObject:toObject:]:認識されていないセレクタはインスタンスに送信しました - [の_NSCFString compareObject:toObject:]未認識セレクタインスタンスに送信

私の提案は、問題がどこにあるか探してみてください、あなたのコードからすべての並べ替え記述子と述語を排除して、一つずつを追加することです。

幸運! ROG

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top