难以将数值写回Core Data

时间:2015-07-06 12:15:46

标签: objective-c core-data nsnumber nsinteger

我有一个名为状态Core Data实体,其中两个属性 savedMessageID 为Integer32, savedMessageText 为String。

我有一个存储在SQL数据库中的字符串,应用程序在启动时下载。数据库中的字符串分为ID和文本两部分:

    NSInteger *newMessageID = [the_ID_as_a_string integerValue];
    NSString *newMessageText = the_message_as_a_string;

然后,我阅读核心数据记录并比较ID以查看是否有更改。如果下载的ID大于存储的ID,则显示新消息。到目前为止这个工作正常。

然后我尝试使用新下载的ID回写核心数据。这是问题...我已经知道了很多人在这里谈论:

NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Status" inManagedObjectContext:context];
NSManagedObject *updatedStatus = [[NSManagedObject alloc]initWithEntity:entitydesc insertIntoManagedObjectContext:context];
[updatedStatus setValue:newMessageID forKey:@"savedMessageID"]; //**error line**
[updatedStatus setValue:newMessageText forKey:@"savedMessageText"];
NSError *error;
[context save:&error];

似乎我无法将NSInteger写回Core Data。我曾尝试编写NSNumber,int等,但所有这些都标记了问题。有什么想法我应该这样做吗?

**我得到的错误是*不允许将非Objective-C指针隐式转换为NSInteger *'(又名'int ')为'id'而不允许使用ARC

1 个答案:

答案 0 :(得分:3)

你犯了一个错误。 Property [the_ID_as_a_string integerValue]返回整数值,而不是指向它的指针。正确的是:

NSInteger newMessageID = [the_ID_as_a_string integerValue];

然后设置值(预期为NSNumber):

[updatedStatus setValue:@(newMessageID) forKey:@"savedMessageID"];

[updatedStatus setValue:[NSNumber numberWithInteger:newMessageID] forKey:@"savedMessageID"];

我建议您生成严格的模型以避免类型不匹配(请参阅此处的答案How to create classes after creating Core Data model in Xcode for iPhone)。