moo*_*ots 3 iphone core-data nsnumber ios
我正在遍历API调用中的一组数字:
[6000,6001,2000]例如
这是我的代码:
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];
}
Run Code Online (Sandbox Code Playgroud)
设置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.'
Run Code Online (Sandbox Code Playgroud)
就好像arrayID没有被强制转换为NSNumber一样?Xcode中说,它的一个NSNumber当我键入它,但如果我把[的ArrayID的doubleValue]例如,Xcode的告诉我,身份证"的doubleValue不能为类型发送'’
有任何想法吗?
只是因为你声明arrayID为NSNumber指针,它不能保证arrayID对象实际上是一个NSNumber.在这种情况下,数组似乎由NSStrings 组成.
在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];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2961 次 |
| 最近记录: |