我有一个名为状态的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
答案 0 :(得分:3)
[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)。