【问题标题】:problems with UIAlertView and deleting an item from my tableviewUIAlertView 出现问题并从我的 tableview 中删除项目
【发布时间】:2011-11-12 10:36:09
【问题描述】:

我想在用户从我的 tableview 中删除项目之前启用 UIAlertView-Request。但是 indexPath 似乎是“nil”...

这是我的编码:

头文件看起来像这样..

    @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 为零。 顺便说一句:tableview 的 else 语句中的 deleteSelectedRow 不是 nil:commitEditingStyle 方法!我完全无能为力。

在 iOS 5 之前它是这样工作的......

感谢您的任何提示。 ifeelhorst

【问题讨论】:

    标签: iphone uitableview ios5 uialertview


    【解决方案1】:

    现在,indexPath 可以在单击/返回警报视图时释放。改变

    deleteSelectedRow = indexPath;
    

    self.deleteSelectedRow = indexPath; // to retain it
    

    或(复制)

    self.deleteSelectedRow = [[indexPath copy] autorelease]; 
    

    这并不能解释为什么它是 nil,但是尝试在该行和警报视图 clickedButtonAtIndex 回调上放置一个断点,看看会发生什么。

    【讨论】:

      【解决方案2】:

      我认为这是因为您正在分配指针而不是复制对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-23
        • 1970-01-01
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多