无法将 NSNumber 存储在核心数据中
Posted
技术标签:
【中文标题】无法将 NSNumber 存储在核心数据中【英文标题】:Unable to store NSNumber in core data 【发布时间】:2011-01-04 12:50:17 【问题描述】:我在我的应用程序中使用 Core Data。我有一个名为 PINCode 的属性,它具有属性 Int64。 现在,在我的应用程序中,我从文本字段中获取 PIN 码,将其转换为 NSNumber 并尝试存储为实体的属性值。但我无法这样做。例外情况控制台上显示的是:- 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'不可接受的属性值类型:property = "PINCode";所需类型 = NSNumber;给定类型 = NSCFString;值 = 121。'
这里是代码:- (转换为 NSNumber):-
NSString *str= txtPINCode.text;
NSNumber *num = [[NSNumber alloc]init];
int tempNum = [str intValue];
num = [NSNumber numberWithInt:tempNum];
(存储在核心数据实体中):-
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *newContact;
newContact = [NSEntityDescription insertNewObjectForEntityForName:@"MemberTable" inManagedObjectContext:context];
[newContact setValue:num forKey:@"PINCode"];
此时应用程序崩溃。我无法找到崩溃的原因。我也尝试通过以下代码检查转换:-
NSNumber *testNumber = [[NSNumber alloc]init];
id test = num;
BOOL testMe = [test isKindOfClass:(Class)testNumber];
有人可以帮我吗? 提前致谢。
【问题讨论】:
您是否尝试将PINCode
的属性类型更改为Int 32
?您不需要 PIN 码字段上的 64 位额外精度,并且 32 位 iPhone 处理器可能使用 Core Data 以不同方式表示 64 位类型。
您不能像在最后一行中那样将类实例类型转换为类。您需要为此使用[testNumber class]
。无论如何,我不确定您要对类型比较做什么。
另外,你在上面的第二行代码中泄漏了一个 NSNumber 实例,因为你分配了一个数字,然后永远不会释放它并在两行之后覆盖它。
【参考方案1】:
嗯,第一个代码块有点奇怪。在第 2 行中,您分配了一个 NSNumber
,然后在第 4 行中,您从第 2 行中泄漏了 NSNumber
,并获得了一个新的 NSNumber
对象(自动释放)。
那么,当您谈到第二个代码块时,这些代码块是如何相关的? num
(来自代码块 1)可能指向代码块 2 中的垃圾。
尝试删除代码块 1 的第 2 行,并在旧的第 4 行中写入以下内容:
NSNumber *num = [[NSNumber alloc] initWithInt:tempNum];
别忘了稍后发布。
【讨论】:
以上是关于无法将 NSNumber 存储在核心数据中的主要内容,如果未能解决你的问题,请参考以下文章
从 CoreData 实体中的 NSNumber 获取 intValue 时无法识别的选择器崩溃