我正在开发我的第一个应用程序,它已经到了在真实设备上进行测试的时候了。办公室里有一台旧的iPhone 3GS,我更新到最新版本的IOS。
当我尝试在iPhone模拟器上启动应用程序时,一切正常。但是,我尝试在我的设备上启动它,应用程序因以下错误而崩溃:
2012-09-13 14:16:01.556 MyFirstApp[1702:707] *** Terminating app due to uncaught
exception 'NSUnknownKeyException', reason: '[<__NSCFString 0x15e2e0> valueForUndefinedKey:]:
this class is not key value coding-compliant for the key testKey.'
我检查了我的构建设置,如下所示:
我也听说过它可能来自IB中未正确设置或删除的一些变量,但我没有任何关于此的警告......
以下是我在错误所关注的视图上使用的一些代码:
@implementation HomeViewController {
@private
NSArray *_orders;
__strong UIActivityIndicatorView *_activityIndicatorView;
}
@synthesize orderList = _orderList;
- (void)reload:(id)sender {
[_activityIndicatorView startAnimating];
[Order orderListWithBlock:^(NSArray *orders) {
if (orders) {
_orders = orders;
[self.orderList reloadData];
}
[_activityIndicatorView stopAnimating];
}];
}
- (void)viewDidLoad
{
[self reload:nil];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Custom Cell Segment";
static NSString *OtherCellIdentifier = @"Other Cell Segment";
Order *o = [_orders objectAtIndex:indexPath.row];
if ([o.testKey isEqualToString:@""]) {
[SOME STUFF]
}
else {
[SOME OTHER STUFF]
}
}
有谁知道错误可以来自哪里?
感谢您的帮助!
答案 0 :(得分:0)
我认为您正在使用界面构建器来开发用户界面,请检查IBOutlet的警告 ,您更改了任何视图的名称。并检查文件所有者。
谢谢
答案 1 :(得分:0)
您尝试使用键值编码访问属性testKey
,但是您尝试在没有该属性的对象上访问它(更具体地说,您尝试在字符串上访问它)
这种情况发生的地点和原因我不知道你没有发布任何代码。
检查您的项目是否可以通过KVC访问testKey
(甚至可能是由于您放入xib中的内容)。
答案 2 :(得分:0)
这可能不是因为模拟器与设备有关,而是因为您在中删除了您在Interface Builder中删除的旧IBOutlet,但该连接仍然存在于XIB中。 只需打开您拥有旧IBOutlet&#34; testKey&#34;的XIB。连接并删除连接。
现在为什么你的应用程序到目前为止在你的模拟器上工作了,这是因为XIB没有被重新编译,或者你从源代码中删除的一些旧的XIB仍然在以前版本的构建产品中。 / p>
所以我打赌如果你完全清理你的项目,删除Build Directory并从头开始重建,你将在Simulator中遇到同样的问题,从而可以重现它并进行调试。 / p>
为此,您可以执行&#34;清洁&#34;来自&#34;产品&#34;打开此菜单以选择&#34;清洁构建文件夹...&#34;菜单,甚至更好的旧选项键。 有时它仍然不够,所以您可以从Finder中删除整个构建文件夹:
这将删除您的Build Output目录,以便下次构建项目时,它将从头开始重新编译。
从那里你可能会在XIB文件上看到你的警告,你会发现你的应用程序也会在模拟器中崩溃,这意味着这不是由设备引起的崩溃,而是由于之前的构建搞砸了你建立的应用程序。 您可以修复此崩溃(通过删除设备和模拟器中旧的&#34; testKey&#34;插座连接)。