2

我正在开发一个 iPad 应用程序来帮助我在国外管理我的开支。

我有一个带有经典主视图和详细视图的拆分视图。在主视图中有费用清单,在明细视图中,你猜怎么着?每一笔费用的细节!当我点击详细信息中的按钮时,使用带有表单的模态 segue 加载新视图。用户插入一个数字,如果该数字大于某个值,则主标签和明细标签的颜色将发生变化。当我保存这个数字时,我关闭模式视图并向主控发送一个 NSMessage,以便使用新标签颜色重新加载表格并重新加载之前选择的详细视图。一切都使用 iOS 模拟器,但是当我在我的 iPad (iPad 2) 上运行该应用程序时,一切都冻结了,我收到了这条消息:

2013-11-09 21:52:04.763 IOUinTravel[562:60b]-[NSConcreteMapTable backgroundView:willChangeToGraphicsQuality:]:无法识别的选择器发送到实例 0x18b8fb00 2013-11-09 21:52:04.767 IOUinTravel[562:60b] * 终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因:“-[NSConcreteMapTable 背景视图:willChangeToGraphicsQuality:]:无法识别的选择器发送到实例 0x18b8fb00”*First throw call stack: (0x2df5bf4b 0x387386af 0x2df5f8e7 0x2df5e1cb 0x2dead4d8 0x30c88b43 0x306cd7b5 0x306cd6e5 0x306cd7d5 0x306cd6e5 0x306da5c3 0x306da417 0x30785f67 0x30785d83 0x3077de85 0x3077d30d 0x3077d07d 0x3077d015 0x306ceda3 0x30355c6b 0x3035147b 0x3035130d 0x30350d1f 0x30350b2f 0x306c70c3 0x2df271cd 0x2df24b71 0x2df24eb3 0x2de8fc27 0x2de8fa0b 0x32b70283 0x30733049 0x9a3d5 0x38c40ab7) libc++abi.dylib: terminating with NSException (lldb) 类型的未捕获异常

我真的不知道为什么以及如何解决它。

我使用的方法是:

在表单模式视图中:

- (IBAction)saveNumber:(id)sender {
    // Do some stuff here
    [self dismissViewControllerAnimated:YES completion:^{ [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadAfterExpenseCheck" object:self];}]; 
}

在主视图中:

- (void)reloadAfterExpenseCheck:(NSNotification *)notification
{
    if ([[notification name] isEqualToString:@"reloadAfterExpenseCheck"]) {
        NSLog(@"Messaggio ricevuto!");
        NSLog(@"%@", self.indexPathToUpdate);
        [self.tableView reloadData];
        [self.tableView selectRowAtIndexPath:self.indexPathToUpdate animated:NO  scrollPosition:UITableViewScrollPositionNone];
        [self performSegueWithIdentifier:@"detailExpense" sender:self];
    }
}

当我触发它在主表中选择一个单元格时,segue @"detailExpense" 起作用,所以我不知道问题出在哪里......在 iOS sim 中它起作用了!

谢谢您的回答。

4

1 回答 1

0

我已经解决了这个问题,我不知道这是最好的方法,但现在可以了。

我开始认为可能会有一些异步任务正在进行。我的 Mac Mini cpu 足够快,可以完成第一个任务,加载视图并用我的数据填充它,iPad cpu 可能太慢了,所以视图没有加载......至少这是我的猜测。我简单地添加了一个 NSTimer,它会在短时间内触发用于加载详细视图的方法。用户没有注意到延迟,但它给了 iPad 时间。

那是代码:

- (void)reloadAfterExpenseCheck:(NSNotification *)notification {
   if ([[notification name] isEqualToString:@"reloadAfterExpenseCheck"]) {

       [self.tableView reloadData];
       [self.tableView selectRowAtIndexPath:self.indexPathToUpdate animated:NO        scrollPosition:UITableViewScrollPositionNone];
       //[self performSegueWithIdentifier:@"detailExpense" sender:self];
       [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(loadIt) userInfo:nil repeats:NO];
   }
}

-(void)loadIt
{
   [self performSegueWithIdentifier:@"detailExpense" sender:self];
}
于 2013-11-12T19:03:35.383 回答