我正在开发一款iPad应用程序来帮助我管理我在国外的费用。
我有一个带有经典主视图和详细视图的拆分视图。在主人中有费用清单,在详细视图中,猜猜是什么?每项费用的细节! 当我点击细节中的按钮时,使用带有表单的模态segue加载新视图。用户插入一个数字,如果该数字大于某个值,则主数据和详细信息中标签的颜色将发生变化。 保存此数字时,我会关闭模态视图并向主服务器发送NSMessage,以便使用新标签颜色重新加载表并重新加载先前选择的详细信息视图。 一切都使用iOS模拟器,但当我在iPad(iPad 2)上运行应用程序时,一切都冻结了,我收到了这条消息:
2013-11-09 21:52:04.763 IOUinTravel [562:60b] - [NSConcreteMapTable backdropView:willChangeToGraphicsQuality:]:发送无法识别的选择器 例如0x18b8fb00 2013-11-09 21:52:04.767 IOUinTravel [562:60b] *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSConcreteMapTable backdropView:willChangeToGraphicsQuality:]:发送无法识别的选择器 例如0x18b8fb00' * 第一次抛出调用堆栈:(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:以未捕获的异常终止 输入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中它可以工作!
感谢您的回答。
答案 0 :(得分: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];
}