保存managedObjectContext
时出现以下错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[Image count]: unrecognized selector sent to instance
代码:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo {
// Delete any existing image.
Image *oldImage = _place.image;
if (oldImage != nil) {
[_place.managedObjectContext deleteObject:oldImage];
}
Image *image = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:_place.managedObjectContext];
image.imageData = UIImageJPEGRepresentation(selectedImage, 0.5);
_place.image = image;
[_place.managedObjectContext save:nil]; //Here is the crash
[self dismissViewControllerAnimated:YES completion:nil];
Image
实体有两个一对一的关系:place
和trip
。
@interface Image : NSManagedObject
@property (nonatomic, retain) NSData * imageData;
@property (nonatomic, retain) Trip *trip;
@property (nonatomic, retain) Place *place;
@end
无法理解为什么[Image count]
错误在一对一的关系中出现。
UPD:
@interface Place : NSManagedObject
@property (nonatomic, retain) NSString * address;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) id thumbnail;
@property (nonatomic, retain) Image *image;
@end
Upd.2:
*** First throw call stack:
(
0 CoreFoundation 0x022935e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x01cef8b6 objc_exception_throw + 44
2 CoreFoundation 0x02330903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
3 CoreFoundation 0x0228390b ___forwarding___ + 1019
4 CoreFoundation 0x022834ee _CF_forwarding_prep_0 + 14
5 CoreData 0x00803df8 -[NSSQLCore _knownOrderKeyForObject:from:inverseToMany:] + 200
6 CoreData 0x0073ad50 -[NSSQLCore _populateRowForOp:withObject:] + 1120
7 CoreData 0x00750e27 -[NSSQLCore recordValuesForInsertedObject:] + 71
8 CoreData 0x00739b5d -[NSSQLCore recordChangesInContext:] + 685
9 CoreData 0x00738925 -[NSSQLCore saveChanges:] + 565
10 CoreData 0x0070555c -[NSSQLCore executeRequest:withContext:error:] + 412
11 CoreData 0x00705050 -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 4704
12 CoreData 0x00731ccc -[NSManagedObjectContext save:] + 764
13 Travel Plan 0x0001cf12 -[PlaceViewController imagePickerController:didFinishPickingImage:editingInfo:] + 738
14 UIKit 0x00cd5e6c -[UIImagePickerController _imagePickerDidCompleteWithInfo:] + 488
15 PhotoLibrary 0x13694e94 PLNotifyImagePickerOfImageAvailability + 106
16 PhotosUI 0x14411585 -[PUUIPhotosAlbumViewController handleNavigateToAsset:inContainer:] + 401
17 PhotosUI 0x143947b4 -[PUPhotosGridViewController collectionView:shouldSelectItemAtIndexPath:] + 577
18 UIKit 0x0106dc0b -[UICollectionView _selectItemAtIndexPath:animated:scrollPosition:notifyDelegate:] + 173
19 UIKit 0x010861f8 -[UICollectionView _userSelectItemAtIndexPath:] + 189
20 UIKit 0x010863b5 -[UICollectionView touchesEnded:withEvent:] + 437
21 libobjc.A.dylib 0x01d01874 -[NSObject performSelector:withObject:withObject:] + 77
22 UIKit 0x00bb6902 forwardTouchMethod + 271
23 UIKit 0x00bb6972 -[UIResponder touchesEnded:withEvent:] + 30
24 libobjc.A.dylib 0x01d01874 -[NSObject performSelector:withObject:withObject:] + 77
25 UIKit 0x00bb6902 forwardTouchMethod + 271
26 UIKit 0x00bb6972 -[UIResponder touchesEnded:withEvent:] + 30
27 libobjc.A.dylib 0x01d01874 -[NSObject performSelector:withObject:withObject:] + 77
28 UIKit 0x00bb6902 forwardTouchMethod + 271
29 UIKit 0x00bb6972 -[UIResponder touchesEnded:withEvent:] + 30
30 UIKit 0x00dd1c7f _UIGestureRecognizerUpdate + 7166
31 UIKit 0x00a9c19a -[UIWindow _sendGesturesForEvent:] + 1291
32 UIKit 0x00a9d0ba -[UIWindow sendEvent:] + 1030
33 UIKit 0x00a70e86 -[UIApplication sendEvent:] + 242
34 UIKit 0x00a5b18f _UIApplicationHandleEventQueue + 11421
35 CoreFoundation 0x0221c83f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
36 CoreFoundation 0x0221c1cb __CFRunLoopDoSources0 + 235
37 CoreFoundation 0x0223929e __CFRunLoopRun + 910
38 CoreFoundation 0x02238ac3 CFRunLoopRunSpecific + 467
39 CoreFoundation 0x022388db CFRunLoopRunInMode + 123
40 GraphicsServices 0x046299e2 GSEventRunModal + 192
41 GraphicsServices 0x04629809 GSEventRun + 104
42 UIKit 0x00a5dd3b UIApplicationMain + 1225
43 Travel Plan 0x0004c53d main + 141
44 libdyld.dylib 0x02dd170d start + 1
)
答案 0 :(得分:19)
在改变模型中的某些关系后,我遇到了完全相同的问题。这似乎是Xcode中的一个错误,当您将“to many:ordered”的关系更改为“to one”关系时出现。就像Xcode仍然认为这种关系很多,因为勾选了“有序”的复选框。
解决这个问题的一个非常简单的解决方案是改回“to to many”关系,取消选择“ordered”,然后再将其更改为“to one”关系。
答案 1 :(得分:7)
这是Xcode中的一些错误。将关系设置为多个,然后返回到一个之后,它开始正常工作。