1

そのため、アプリがフリーズし、タッチ イベントに応答しません。そこに座っているだけでクラッシュしませんか?

一時停止ボタン || を押すと、次のコード行で停止します。

 NSArray *results = [context executeFetchRequest:request error:&error];

次に再生を押すと、そのアプリはまだフリーズしており、一時停止をもう一度押すと、上記のコード行を指します。

これが一時停止する完全なコードです。

NSManagedObjectContext *context = [NSManagedObjectContext contextForCurrentThread];
NSEntityDescription *entity = [self entityDescriptionInContext:context];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:[entity name]];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(thingId like[c] %@)", sessionID];
[request setPredicate:predicate];

NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];  **<-- Pause lands me here**

if (!results || error || 0 == results.count){
    return nil;
}

return [results objectAtIndex:0];
4

2 に答える 2

0

「LIKE[c]」を使用せず、代わりに「==」を使用するようにした答えを見つけました。また、何かをフェッチするときにアプリで[AppDelegate managedObjectContext]を使用するのではなく、contextForCurrentThreadを使用するようになりました。

これらの両方を行うことで、私のアプリはフリーズを停止しました。

于 2012-08-26T18:26:36.190 に答える
0

実行しているクエリが多くのレコードを通過する可能性が非常に高く、それらのレコードを取得するのに長い時間がかかります。そのフェッチをバックグラウンド スレッドで行い、レコードの objectID をメイン スレッドに移動してみてください。その時点でデバッガを実行しているため、アプリケーションがクラッシュすることはありません。アプリケーションを Xcode からではなくデバイスから直接実行すると、クラッシュする可能性が非常に高くなります。

于 2012-08-25T00:40:29.427 に答える