我有一个名为marbles的整数,我正在尝试使用以下代码将其保存到数组中:
[records setValue:marbles forKey:@"marbles"];
使用此代码,我收到警告:
警告:语义问题:不兼容的整数到指针转换将'int'发送到'id'类型的参数
那么,我如何设置NSInteger的值。
下一个问题,如何将数组重新上传到核心数据?我获取数组,进行更改,以及如何将这些更改应用回Core Data?
由于
答案 0 :(得分:14)
使用整数初始化NSNumber(这是CoreData所期望的):
NSNumber *marbleNumber = [NSNumber numberWithInt:marbles];
[records setObject:marbleNumber forKey@"marbles"];
或者:
[records setMarbles:[NSNumber numberWithInt:marbles]];
要保留更改,请保存上下文:
NSError *error;
[myManagedObjectContext save:&error];
//handle your error
答案 1 :(得分:6)
NSArrays只接受对象,因此第一步是使用此方法将NSInteger转换为NSNumber:
+ (NSNumber *)numberWithInt:(int)value
这样:
NSNumber *myNumber = [NSNumber numberWithInt:marbles];
然后你可以这样做:
[records setValue:myNumber forKey:@"marbles"];
基本上,一旦获取数据,就会得到一个managedObjectContext,将其视为绘图板,并且您对此对象所做的任何更改(包括添加或删除新对象)都可以使用类似这样的内容再次保存到CoreData :
NSError *error;
if (![context save:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
上下文是您使用NSFetchedResultsController获得的上下文。您可以这样:
NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
答案 2 :(得分:0)
- (id)primitiveValueForKey:(NSString *)key;
- (void)setPrimitiveValue:(id)value forKey:(NSString *)key;
使用NSNumber代替(id)值