IOS5 - 应用程序在模拟器上运行但在设备上崩溃

时间:2012-09-13 12:29:55

标签: iphone ios xcode runtime-error

我正在开发我的第一个应用程序,它已经到了在真实设备上进行测试的时候了。办公室里有一台旧的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.'

我检查了我的构建设置,如下所示:

enter image description here

我也听说过它可能来自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]
    }
}

有谁知道错误可以来自哪里?

感谢您的帮助!

3 个答案:

答案 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中删除整个构建文件夹:

  • 打开管理器(菜单&#34; Window&#34; - &gt;&#34;管理器&#34;)
  • 选择&#34;项目&#34;选项卡在顶部,然后选择左侧的项目
  • 点击&#34;删除&#34; &#34;派生数据旁边的按钮&#34;区。

这将删除您的Build Output目录,以便下次构建项目时,它将从头开始重新编译。

从那里你可能会在XIB文件上看到你的警告,你会发现你的应用程序也会在模拟器中崩溃,这意味着这不是由设备引起的崩溃,而是由于之前的构建搞砸了你建立的应用程序。 您可以修复此崩溃(通过删除设备和模拟器中旧的&#34; testKey&#34;插座连接)。