iphone - NSNumber 未正确转换并被解释为 NSCFString?

标签 iphone ios core-data nsnumber

我正在遍历通过 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];
    }

当设置 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 会告诉我 'doubleValue cannot be sent for type 'id'

有什么想法吗?

最佳答案

仅仅因为您将 arrayID 声明为 NSNumber 指针,它并不能保证 arrayID 对象实际上是一个 NSNumber 。在这种情况下,该数组似乎由 NSString 组成。

在 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];
}

关于iphone - NSNumber 未正确转换并被解释为 NSCFString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9104172/

相关文章:

ios - 可以刷新整个核心数据对象吗?

iphone - 在一个上下文中保留项目,但核心数据无法在另一上下文中找到项目?

iphone - 在 Objective-C 中取消后台线程

ios - 从核心数据中获取数据

ios - Swift Apple Mach-O 链接器错误

ios - 如何在 IOS 中平滑地缩放图层以将对象保留在屏幕上?

ios - 恢复过去的 NSLog

iphone - 使用 Accelerate 框架对无符号 8 位整数数组求和

iphone - 访问使用 iTunes 传输的 "private Documents"文件夹中的文件

javascript - Cordova:设备就绪不显示