我希望在用户可以从我的tableview中删除项目之前启用UIAlertView-Request。但indexPath似乎是“零”......
这是我的编码:
标头文件看起来像..
@interface ReturnRootViewController : UITableViewController <NSFetchedResultsControllerDelegate> {
// ..
NSIndexPath *deleteSelectedRow;
}
// ..
@property (nonatomic, retain) NSIndexPath *deleteSelectedRow;
@end
.. 实施文件看起来像..
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSUserDefaults *setting = [NSUserDefaults standardUserDefaults];
[setting synchronize];
// for the UIAlert-View handling:
deleteSelectedRow = indexPath;
if ([setting boolForKey:@"delete_preference"]) {
// Sicherheitsabfrage vor dem Löschen
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Achtung", @" ")
message:NSLocalizedString(@"Sind Sie sicher, dass Sie den Eintrag löschen wollen?", @" ")
delegate:self
cancelButtonTitle:NSLocalizedString(@"Nein", @"Nein")
otherButtonTitles:NSLocalizedString(@"Ja", @"Ja"), nil];
[alert show];
[alert release];
} else {
// just the case you override the settings
[moc deleteObject:[fetchedResultsController objectAtIndexPath:deleteSelectedRow]];
NSError *error = nil;
if (![moc save:&error]) {
NSLog(@"Ungelöstes Problem %@, %@", error, [error userInfo]);
abort();
}
}
}
}
最后但并非最不重要的 uialertview-handling 的方法:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 1) {
// Delete request
[moc deleteObject:[fetchedResultsController objectAtIndexPath:deleteSelectedRow]];
// ..
这就是我的应用转储的地方! deleteSelectedRow为nil。 顺便说一句:deleteSelectedRow在tableview中的else-Statement中不是nil:commitEditingStyle-method!我完全无助。
在iOS 5之前,它的工作原理就是......
感谢任何提示。 ifeelhorst
答案 0 :(得分:0)
我认为这是因为你要分配指针而不是复制对象。
答案 1 :(得分:0)
就像现在一样,indexPath可以在单击警报视图/返回时释放。变化
deleteSelectedRow = indexPath;
到
self.deleteSelectedRow = indexPath; // to retain it
或(制作副本)
self.deleteSelectedRow = [[indexPath copy] autorelease];
这并不能解释为什么它为零,尝试在该行和警报视图clickedButtonAtIndex
回调上设置一个断点,看看会发生什么。