无法将NSNumber存储在核心数据中

时间:2011-01-04 12:50:17

标签: iphone ios

我在我的应用程序中使用Core Data。我有一个名为 PINCode 的属性,其属性为 Int64 。 现在,在我的应用程序中,我从文本字段中取出PIN码,将其转换为 NSNumber ,并尝试将其存储为实体的属性值。但我无法这样做。除此之外在控制台上显示: - 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'属性的值不可接受的类型:property =“PINCode”;所需类型= NSNumber;给定type = 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];

任何人都可以帮我吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

嗯,第一个代码块有点奇怪。在第2行中,您分配了一个NSNumber,然后在第4行中从第2行泄漏NSNumber并获得一个新的NSNumber对象(自动释放)。

那么,当你来到第二个代码块时,这些代码块是如何相关的? num(来自代码块1)可能指向代码块2中的垃圾。

尝试删除代码块1的第2行,并在旧行4中写下以下内容:

NSNumber *num = [[NSNumber alloc] initWithInt:tempNum];

不要忘记稍后发布。