iPhone OS:为什么我的managedModelObject不符合Key Value Coding?
好吧,我正在为我的应用程序构建这个统计跟踪器,并且我已经构建了一个名为statTracker的数据模型对象,用于跟踪我想要的所有内容。 我可以使用选择器设置和检索值,但是如果我尝试使用KVC(即setValue:forKey:),那么一切都很糟糕,并且说我的StatTracker类不符合KVC:
valueForUndefinedKey:]:实体StatTracker不是关键字“timesLauched”的关键字值。 2010-05-18 15:55:08.573
这是触发它的代码:
NSArray *statTrackerArray = [[NSArray alloc] init];
statTrackerArray = [[CoreDataSingleton sharedCoreDataSingleton] getStatTracker];
NSNumber *number1 = [[NSNumber alloc] init];
number1 = [NSNumber numberWithInt:(1 + [[(StatTracker *)[statTrackerArray objectAtIndex:0] valueForKey:@"timesLauched"] intValue])];
[(StatTracker *)[statTrackerArray objectAtIndex:0] setValue:number1 forKey:@"timesLaunched" ];
NSError *error;
if (![[[CoreDataSingleton sharedCoreDataSingleton] managedObjectContext] save:&error]) {
NSLog(@"error writing to db");
}
不知道这是否足够代码让你知道你需要什么,如果你需要更多。
如果我可以使用KVC,这将是如此的甜蜜,因为我可以将所有这些统计跟踪的东西抽象成一个方法调用,其中包含一个字符串参数。 至少这是我希望在这里完成的。 我现在实际上已经了解了KVC的强大功能,但现在我只是想弄清楚如何使它工作。
谢谢!
缺口
添加下面的代码后,输出结果如下:
对象:(实体:StatTracker; id:0x3e1e1b0; data:)2010-05-19 11:30:38.173 verses [29526:207] ***由于未捕获异常'NSUnknownKeyException',原因:'[valueForUndefinedKey:] :实体StatTracker不是关键字“timesLauched”的关键字值。 2010-05-19 11:30:38.174 verses [29526:207] Stack :(
好的,首先在代码中有几个错误。 你调用alloc init的NSArray
和NSNumber
只是被下一行的赋值抛弃。 因此,那些应该开始了生活,作为一个nil
(或者你可以在两行合并在一起)。
其次,你应该抓住一个指向NSManagedObject
的指针,这样你就可以偷看它,并确保它是你的想法。
NSArray *statTrackerArray = nil;
statTrackerArray = [[CoreDataSingleton sharedCoreDataSingleton] getStatTracker];
NSNumber *number1 = nil;
id object = [statTrackerArray objectAtIndex:0];
NSLog(@"Object: %@", object);
NSInteger timesLaunched = [[object valueForKey:@"timesLauched"] intValue];
timesLaunched += 1;
number1 = [NSNumber numberWithInteger:timesLaunched];
[object setValue:number1 forKey:@"timesLaunched" ];
NSError *error = nil;
if (![[[CoreDataSingleton sharedCoreDataSingleton] managedObjectContext] save:&error]) {
NSLog(@"error writing to db: %@n%@", [error localizedDescription], [error userInfo]);
}
这些更改将消除内存泄漏,并让您看到您正在尝试使用的内容。 我还展开了对数字的递增,以便当您在调试器中使用objc_exception_throw
上的断点objc_exception_throw
您可以确切地看到哪一行导致问题。
我怀疑你的对象StatTracker
不是NSManagedObject
的合适的子NSManagedObject
。
更改代码以匹配上面的内容,然后重新运行测试。 然后用输出更新您的问题,以便我们更好地了解问题。
更新
该物业是'timesLaunched'
您正尝试访问'timesLauched'
简单的错字。 我甚至将你的错字复制到我的代码版本:)
链接地址: http://www.djcxy.com/p/19227.html上一篇: iPhone OS: Why is my managedModelObject not complying with Key Value Coding?
下一篇: What is the quickest way to validate a postal code as existing on the iPhone?