难以将数字值写回核心数据

Difficulty writing number value back to Core Data

我有一个名为 StatusCore Data 实体,它有两个属性 savedMessageID 作为 Integer32 和 savedMessageText 作为字符串。

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

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

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

然后我尝试用新下载的 ID 写回 Core Data。这就是问题所在……我已经知道这里已经讨论了很多:

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 等,但所有这些都标记了问题。我应该怎么做?

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

你犯了一个错误。 属性 [the_ID_as_a_string integerValue] returns 整数值,不是指向它的指针。正确的是:

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)。