整数到NSInteger并保存到核心数据

时间:2011-11-12 01:07:45

标签: iphone objective-c ios xcode core-data

我有一个名为marbles的整数,我正在尝试使用以下代码将其保存到数组中:

[records setValue:marbles forKey:@"marbles"];

使用此代码,我收到警告:

警告:语义问题:不兼容的整数到指针转换将'int'发送到'id'类型的参数

那么,我如何设置NSInteger的值。

下一个问题,如何将数组重新上传到核心数据?我获取数组,进行更改,以及如何将这些更改应用回Core Data?

由于

3 个答案:

答案 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];

我建议您查看Core Data programming guide

答案 2 :(得分:0)

- (id)primitiveValueForKey:(NSString *)key;    
- (void)setPrimitiveValue:(id)value forKey:(NSString *)key;

使用NSNumber代替(id)值