Có những lúc bị treo ứng dụng của tôi trước khi nó được nạp đầy đủ ngay tại dòng sau:EXC_BAD_ACCESS ngẫu nhiên với persistentStoreCoordinator
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
Phương pháp hoàn chỉnh mà nếu trạng thái này nằm ngoại hình như sau (tôi nghĩ rằng đây là khá tiêu chuẩn):
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil) {
return __persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __persistentStoreCoordinator;
}
cập nhật
Vụ tai nạn xảy ra vào thời gian thứ haiPhương thứcđược gọi. EDIT Thời gian But nó được gọi là từ viewController đầu tiên mà có thể nhìn thấy:
- (void)updateStats {
NSLog(@"Updating stats");
dispatch_queue_t request_queue = dispatch_queue_create("updateNumberOfSchedules", NULL);
dispatch_async(request_queue, ^{
AppDelegate *theDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:[theDelegate persistentStoreCoordinator]];
...
});
}
Lần thứ hai (khi vụ tai nạn đôi khi xảy ra khi lớp DeviceLinker tôi sẽ kiểm tra các cơ sở dữ liệu cho các liên kết hoạt động trong checkInactiveLinks của tôi . phương pháp phương pháp này được gọi là khi khởi động trong applicationDidBecomeActive
:
-(void) checkInactiveLinks {
AppDelegate *theDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init];
[newMoc setPersistentStoreCoordinator:[theDelegate persistentStoreCoordinator]];
...
}
đúng tôi nếu tôi sai nhưng đọc mã của tôi, tôi sẽ nghĩ rằng vào thời gian thứ hai getter persistentStoreCoordinator được gọi nó sẽ trả về __persistentStoreCoordina tor và không phân bổ và init một cái mới ...
UPDATE 2 Trên dòng chính xác cùng một lúc câu lệnh if tôi có được điều này trong từng thời kỳ quá:
-[__NSCFDictionary _hasPrecomputedKeyOrder]: unrecognized selector sent to instance 0x7dd3770
CẬP NHẬT 3
Tôi đã chỉnh sửa sơ đồ xây dựng của mình và bật zombie và đăng nhập ngoại lệ trong tab chẩn đoán. Bây giờ tôi thấy -[NSPersistentStoreCoordinator unlock]: message sent to deallocated instance 0x8916090
. Lưu ý rằng tôi không có bất kỳ khóa rõ ràng nào trong mã của mình.
bạn có đang sử dụng ARC không? – mydogisbox
Có gì trong nhật ký? –
Bạn có đang chỉnh sửa mô hình mà không cần tạo lại phiên bản mới của mô hình trước không? –