2 つの画面間を数回切り替えると、iOS アプリがサベージでハングします。データを保存するために属していますが、これよりもエラーなしでフリーズします。どうすればこれを修正できますか?
self.fetchF = dispatch_queue_create(label, NULL);
dispatch_async(self.fetchF, ^{
NSArray *feeds = [FeedFetcher getData:self.pageTitle downloadBy:@"up"];
NSManagedObjectContext *newContext = self.managedObject;
for (NSDictionary *feedInfo in feeds) {
[Feed FeedWithInfo:feedInfo InManageObject:newContext];
}
dispatch_async(dispatch_get_main_queue(), ^{
NSError *error = nil;
if (newContext != self.managedObject)
[newContext save:&error];
if (error)
NSLog(@"Error save : %@", error);
[self setupFetchedResultsController];
[self downloadImages:feeds];
});
});
編集 :
すべてのスレッドが新しいスレッドになるように、managedobjectcontext を変更します。しかし、今では 2 つの画面の間を数回セグすると [self.fetchedResultsController performFetch:&error]; でフリーズします。エラーなし..誰かが解決策を考えていますか?
- (void)performFetch
{
if (self.fetchedResultsController) {
if (self.fetchedResultsController.fetchRequest.predicate) {
if (self.debug) NSLog(@"[%@ %@] fetching %@ with predicate: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName, self.fetchedResultsController.fetchRequest.predicate);
} else {
if (self.debug) NSLog(@"[%@ %@] fetching all %@ (i.e., no predicate)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName);
}
NSError *error;
if (self.fetchedResultsController != nil)
[self.fetchedResultsController performFetch:&error];
if (error) NSLog(@"[%@ %@] %@ (%@)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), [error localizedDescription], [error localizedFailureReason]);
} else {
if (self.debug) NSLog(@"[%@ %@] no NSFetchedResultsController (yet?)", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
}
[self.tableView reloadData];
}