Tôi đang gặp sự cố lớn khi phát triển ứng dụng iphone của mình.CoreData: lỗi: Lỗi ứng dụng nghiêm trọng. Đã xảy ra ngoại lệ trong khi xử lý thay đổi Dữ liệu cốt lõi
đây có đầy đủ các lỗi:
CoreData: error: Serious application error. Exception was caught during Core Data
change processing. This is usually a bug within an observer of
NSManagedObjectContextObjectsDidChangeNotification. -[TimeSpentStudying coordinate]:
unrecognized selector sent to instance 0x21db92d0 with userInfo (null)
Đây là kỳ lạ bởi vì tôi có hai thực thể CoreData (Địa điểm & TimeSpentStudying). Nhưng tôi không nghĩ đó là những vấn đề. [TimeSpentStudying coordinate]
là lạ, bởi vì tôi không có một tài sản coordinate
gửi vào lớp dữ liệu TimeSpentStudying
lõi
Tôi có một MapView thiết lập, và khi người dùng chạm vào nút tiết lộ chi tiết về một mkannotationview, một cái nhìn mới (LibraryTrackTimeViewController) pops lên, nhưng là khá nhiều không sử dụng được. Tôi đã thử gọi NSLog trong viewDidLoad và không có gì xuất hiện.
mapViewController.m
#pragma mark - NSNotification
- (void)contextDidChange:(NSNotification *)notification
{
if ([self isViewLoaded]) {
[self updateLocations];
}
.
- (void)updateLocations
{
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Location" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
NSError *error;
NSArray * foundObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (foundObjects == nil) {
FATAL_CORE_DATA_ERROR(error);
return;
}
if (locations != nil) {
[self.mapView removeAnnotations:locations];
}
locations = foundObjects;
[self.mapView addAnnotations:locations];
}
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NSManagedObjectContextObjectsDidChangeNotification
object:self.managedObjectContext];
}
lỗi tôi nghĩ rằng có thể phải làm với các phương pháp prepareForSegue trong mapViewController.m
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if (distance < 500) {
if ([segue.identifier isEqualToString:@"TrackLibraryTimes"]) {
UINavigationController *navigationController = segue.destinationViewController;
LibraryTrackTimeViewController *controller = (LibraryTrackTimeViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
}
}}
Tôi xin lỗi vì cú pháp thô, tôi chỉ làm quen để SO, nếu bạn cần thêm bất kỳ mã nào, vui lòng cho tôi biết, cảm ơn tất cả.
Xin chào và chào mừng! Ngoài ra, câu hỏi tuyệt vời! – doge
Thông báo lỗi nêu rõ rằng thông điệp 'tọa độ' được gửi đến một thể hiện của' TimeSpentStudying', có lẽ là đối tượng có địa chỉ 0x21db92d0. Vì vậy, tại một số thời điểm bạn đang làm việc với một đối tượng 'TimeSpentStudying' trong đó một kiểu khác (' Locations'?) Được mong đợi. Do độ phân giải phương thức động trong Objective-C, các vấn đề như vậy thường chỉ được tiết lộ khi chạy. Bạn nên cố gắng xác định vấn đề, ví dụ: bằng cách đặt một điểm ngắt trên tất cả các ngoại lệ của Objective-C. –