Không chắc chắn tôi đang làm gì sai ở đây.Lỗi thêm nhiều lỗi CoreData
Trường học có nhiều sinh viên và Sinh viên có tính nghịch đảo của nó.
Một mã kiểm tra ít như sau:
@class Student;
@interface School : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSOrderedSet *students;
@end
@interface School (CoreDataGeneratedAccessors)
- (void)insertObject:(Student *)value inStudentsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromStudentsAtIndex:(NSUInteger)idx;
- (void)insertStudents:(NSArray *)value atIndexes:(NSIndexSet *)indexes;
- (void)removeStudentsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInStudentsAtIndex:(NSUInteger)idx withObject:(Student *)value;
- (void)replaceStudentsAtIndexes:(NSIndexSet *)indexes withStudents:(NSArray *)values;
- (void)addStudentsObject:(Student *)value;
- (void)removeStudentsObject:(Student *)value;
- (void)addStudents:(NSOrderedSet *)values;
- (void)removeStudents:(NSOrderedSet *)values;
@end
// Meanwhile, elsewhere...
-(void)go {
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [app managedObjectContext];
School *school = (School *)[NSEntityDescription insertNewObjectForEntityForName:@"School" inManagedObjectContext:context];
[school setName:@"Stanford"];
Student *student = (Student *)[NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:context];
[student setName:@"Eric"];
//[school addStudentsObject:student];
NSMutableSet *students = [school mutableSetValueForKey:@"students"];
[students addObject:student];
NSError *__autoreleasing error;
BOOL success = [context save:&error];
if (!success) {
@throw [NSException exceptionWithName:NSGenericException
reason:[error description]
userInfo:nil];
}
}
Sử dụng nhận xét addStudentsObject:
không thành công với:
2013-04-13 16:22:58.648 CDTMTest[2098:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet intersectsSet:]: set argument is not an NSSet'
*** First throw call stack:
(0x1fa2012 0x13dfe7e 0x2030a4a 0xb85ec6 0xb087f9 0xb85d33 0x11aa638 0x7ee2069 0x2b4d 0xacd5b3 0x1f61376 0x1f60e06 0x1f48a82 0x1f47f44 0x1f47e1b 0x1efc7e3 0x1efc668 0x13ffc 0x1bdd 0x1b05)
libc++abi.dylib: terminate called throwing an exception
Sử dụng mutableSetValueForKey:
không thành công với
2013-04-13 16:07:05.111 CDTMTest[2012:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'NSManagedObjects of entity 'School' do not support -mutableSetValueForKey: for the property 'students''
*** First throw call stack:
(0x1fa3012 0x13e0e7e 0x11370da 0x3af3 0xace5b3 0x1f62376 0x1f61e06 0x1f49a82 0x1f48f44 0x1f48e1b 0x1efd7e3 0x1efd668 0x14ffc 0x2b7d 0x2aa5)
libc++abi.dylib: terminate called throwing an exception
này có thể chỉ là một lỗi đánh máy, nhưng tôi đang bối rối: Bạn đề cập đến: "Các nhận xét 'setStudentsObject'" đang gây ra lỗi. Nhưng trong văn bản câu hỏi của bạn, dòng nhận xét là 'addStudentsObject'. Đó có phải chỉ là lỗi đánh máy trong câu hỏi của bạn hay là điều gì gây ra lỗi? –
@Anthony: đó là lỗi đánh máy. 'add ~' là chính xác, cố định. Cảm ơn! – QED
có thể trùng lặp của [Ngoại lệ được ném trong NSOrderedSet tạo accessors] (http://stackoverflow.com/questions/7385439/exception-thrown-in-nsorderedset-generated-accessors) –