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

Aha*_*tra 4 iphone xcode core-data objective-c ios

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

[records setValue:marbles forKey:@"marbles"];
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

谢谢

isa*_*aac 14

使用整数初始化NSNumber(这是CoreData期望的):

NSNumber *marbleNumber = [NSNumber numberWithInt:marbles];
[records setObject:marbleNumber forKey@"marbles"];
Run Code Online (Sandbox Code Playgroud)

要么:

[records setMarbles:[NSNumber numberWithInt:marbles]];
Run Code Online (Sandbox Code Playgroud)

要保留更改,请保存上下文:

NSError *error;
[myManagedObjectContext save:&error];

//handle your error
Run Code Online (Sandbox Code Playgroud)


Osc*_*mez 6

NSArrays只接受对象,因此第一步是使用此方法将NSInteger转换为NSNumber:

+ (NSNumber *)numberWithInt:(int)value
Run Code Online (Sandbox Code Playgroud)

所以:

NSNumber *myNumber = [NSNumber numberWithInt:marbles];
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

[records setValue:myNumber forKey:@"marbles"];
Run Code Online (Sandbox Code Playgroud)

基本上,一旦获取数据,就会获得一个managedObjectContext,将其视为绘图板,并且您对此对象所做的任何更改(包括添加或删除新对象)可能会使用以下内容再次保存到CoreData:

NSError *error;
        if (![context save:&error]) {
            // Update to handle the error appropriately.
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            exit(-1);  // Fail
        }
Run Code Online (Sandbox Code Playgroud)

上下文是您使用NSFetchedResultsController获得的上下文.你可以这样得到:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
Run Code Online (Sandbox Code Playgroud)

我建议您查看核心数据编程指南