我正在遍历API调用的数字数组:
例如[6000,6001,1000]
这是我的代码:
for(NSNumber* arrayID in array){
NSManagedObject *ent = [NSEntityDescription insertNewObjectForEntityForName:@"Genre" inManagedObjectContext:self.managedObjectContext];
[ent setValue:arrayID forKey:@"genreID"];
[ent setValue:name forKey:@"genreName"];
[mySet addObject:ent];
}
设置arrayID(我的核心数据中是NSNumber)时,我遇到了崩溃:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unacceptable type of value for attribute: property = "genreID"; desired type = NSNumber; given type = __NSCFString; value = 6002.'
就好像arrayID还没有被强制转换为NSNumber一样?当我输入时,Xcode表示它是一个NSNumber,但是如果我把[arrayID doubleValue]作为例子,Xcode告诉我'不能为类型'id'发送'doubleValue
有什么想法吗?
答案 0 :(得分:5)
仅仅因为您将arrayID
声明为NSNumber
指针,它并不能保证arrayID
对象实际上是NSNumber
。在这种情况下,数组似乎由NSString
s。
在Objective-C中,对象类型只是编译器的真正提示,你可以将任何内容转换为任何东西,并调用对象上的任何方法,这些东西实际上只在运行时失败。您必须查看创建array
的位置,以查看其实际类型。
在这种情况下,如果它们都是字符串,你可以做
for(NSString* arrayID in array){
NSManagedObject *ent = [NSEntityDescription insertNewObjectForEntityForName:@"Genre" inManagedObjectContext:self.managedObjectContext];
[ent setValue:[NSNumber numberWithInt:[arrayID intValue]] forKey:@"genreID"];
[ent setValue:name forKey:@"genreName"];
[mySet addObject:ent];
}
答案 1 :(得分:1)
你是如何创建阵列的?听起来它确实包含NSStrings,而不是NSNumbers。