0

从 tableView 中删除单元格时,我遇到了很多麻烦。我在滑动单元格中有 3 个按钮,当滑动时显示,调用滑动的方法在 JBSliderViewController 中。为了访问嵌入在 homeViewController 中的类方法,我在 JBSliderViewController 中创建了一个实例方法-(void)callDeleteFound来调用我的 homeViewController 中的 +(void)deleteFound。

我现在的问题是我无法访问我的 tableView 来调用– deleteRowsAtIndexPaths:withRowAnimation: 以及currentTable返回 null

有什么建议么?

在 JBSliderController 内部

- (void)callDeletefound {
    [homeViewController deleteFound];

}

在 homeViewController 里面

+ (void)deleteFound {
    NSUserDefaults *userSessionData = [NSUserDefaults standardUserDefaults];
    NSString *userID = [userSessionData stringForKey:@"userID"];
    NSString *authKey = [userSessionData stringForKey:@"authKey"];
    NSString *appVersion = [userSessionData stringForKey:@"appVersion"];
    NSString *versionedURL = [NSString stringWithFormat:@"/ios/%@/", appVersion];
    NSURL *url = [NSURL URLWithString:@"http://website.com"];
    NSString *postPath = [NSString stringWithFormat:@"%@deletefind.php", versionedURL];
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                            userID, @"userid",
                            [MyClass friendID], @"friendid",
                            authKey, @"tempAuth",
                            nil];
    [httpClient postPath:postPath parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        [SVProgressHUD showSuccessWithStatus:@"Removed from notifications"];
        NSMutableArray *notificationArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"notificationsArray"];
        NSMutableArray *arrayThatYouCanRemoveObjects = [NSMutableArray arrayWithArray:notificationArray];
        NSLog(@"%@", [MyClass cellNum]);
        NSInteger *num = [[MyClass cellNum] integerValue];
        [arrayThatYouCanRemoveObjects removeObjectAtIndex:num];
        [currentTable deleteRowsAtIndexPaths:openedCellIndexPath withRowAnimation:UITableViewRowAnimationLeft];
        [currentTable reloadData];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"[HTTPClient Error]: %@", error.localizedDescription);
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Fail" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert show];
    }];
}
4

2 回答 2

2

为了获得滑动效果,您需要实现表格视图委托

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

方法,这将提供对滑动交互的访问以进行删除。我通常也会为可以删除的表格视图提供编辑交互,因为滑动交互往往对用户有点隐藏。

举个例子:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  [tableView beginUpdates];    
  if (editingStyle == UITableViewCellEditingStyleDelete) {
    // Do whatever data deletion you need to do...
    // Delete the row from the data source
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationTop];      
  }       
  [tableView endUpdates];
}

希望有帮助。

于 2013-07-23T04:22:30.573 回答
0

NSArray 是不可变的,这意味着您不能添加或删除元素,因此您的对象没有removeObjectAtIndex: 方法。

  • 检查您的财产,看看它是否是一个NSArray而不是一个NSMutableArray
  • 检查该指针中的对象是否实际上是一个NSMutableArray.
  • 要将一个分配NSArray给您的变量,首先使用该方法NSMutableArray从它 创建一个。arrayWithArray:
于 2013-07-23T04:20:33.217 回答