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的NSArrayNSNumber只是被下一行的赋值抛弃。 因此,那些应该开始了生活,作为一个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?