我将Xcode更新为版本6,并将我的iOS应用程序的部署目标从之前的7.0更改为8.1。在此更新之前,应用程序在我的iPad和iOS模拟器上运行没有任何问题。然而,在更新之后,我可以像以前一样在我的设备上运行应用程序(以前的iOS 7,但也刚刚更新到iOS 8.1),但它在模拟器上崩溃并带有NSInvalidArgumentException:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell disclosureButton]: unrecognized selector sent to instance 0x7f85c7f0'
对于这个问题,关于BuildingCell或disclosureButton并没有什么特别之处。但是当我尝试向公开按钮添加动作时,应用程序崩溃了。
BuildingCell标题:
@interface BuildingsCell : UITableViewCell
@property (strong, nonatomic) UIButton *disclosureButton;
@end
应用程序崩溃的功能:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"BuildingCell";
BuildingsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [BuildingsCell.alloc initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.accessoryType = UITableViewCellAccessoryNone;
//*** App crashes on the line below ***
[cell.disclosureButton addTarget:self action:@selector(tappedCell:)forControlEvents:UIControlEventTouchUpInside];
Building *currentBuilding = self.buildingArray[indexPath.row];
return cell;
}
功能我尝试链接到disclosureButton
- (void) tappedCell:(id)sender
{
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.buildingTableView];
NSIndexPath *indexPath = [self.buildingTableView indexPathForRowAtPoint:buttonPosition];
[self tableView:self.buildingTableView accessoryButtonTappedForRowWithIndexPath:indexPath];
}
我发现代码没有任何问题。是否有可能是模拟器出现问题?模拟器是否有我需要设置的参数?我有一段时间没有做过Xcode或这个应用程序,我显然遗漏了一些东西。在这一点上,任何建议都会有所帮助,因为我不在乎。
答案 0 :(得分:0)
问题实际上是本地化问题之一。我的应用程序是法语,但我有一个不完整的英语故事板(早期的尝试,使应用程序双语),在很久以前就被搁置了。因此,尽管我将模拟器的语言设置为法语,但每次应用程序在模拟器上运行时,它都使用不完整的英语故事板。我没注意到,由于崩溃,只有初始视图(不包含语言区分信息)可见。
看起来Xcode 6已经进行了一些本地化更新。
我通过在编辑方案中将应用程序语言设置为“法语”来解决了这个问题。
所以,你好。 。现在感觉有点羞怯。
感谢您的建议。