从UITableView中删除项目 - 从Parse.com获取数据

时间:2014-09-21 20:25:41

标签: ios objective-c uitableview parse-platform

我有一个UITableview,可以从parse.com加载数据并显示它。我希望这是可编辑的,这样当用户从表视图中删除项目时,它会从parse.com中删除它

我使用了自己的tableview并使用parseSimpleCell.h,.m作为自定义单元格

这是我的tableview .h和.m文件

#import <UIKit/UIKit.h>
#import <Parse/Parse.h>
#import "ParseExampleCell.h"

@interface FavoritesTableViewController : UITableViewController <UITableViewDelegate,UITableViewDataSource> {
    NSArray *itemsArray;
}

@property (weak, nonatomic) IBOutlet UITableView *favItemsTable;

@end

这是.m文件

#import "FavoritesTableViewController.h"

@interface FavoritesTableViewController ()

@end

@implementation FavoritesTableViewController



- (void)viewDidLoad {
    [super viewDidLoad];

    [self performSelector:@selector(retrieveFromParse)];


    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void) retrieveFromParse {

    PFUser *currentUser = [PFUser currentUser];

    PFQuery *query = [PFQuery queryWithClassName:@"UserFavourite"];
    [query whereKey:@"userIdString" equalTo:currentUser.objectId];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            itemsArray = [[NSArray alloc] initWithArray:objects];
        }
        [_favItemsTable reloadData];
    }];
}



#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.

    return itemsArray.count;

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    ParseExampleCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    PFObject *tempObject = [itemsArray objectAtIndex:indexPath.row];

    cell.cellTitle.text = [tempObject objectForKey:@"item"];


    cell.tintColor = [UIColor redColor];

    return cell;

}


// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}



// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {


}


@end

我需要帮助解决此方法- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

中的内容

我已经查看了其他问题但是看到了变量对象,那是前端eh retrieveFromParse方法在commitEditing样式方法中不可用?

我尝试过这样的事情

if (editingStyle == UITableViewCellEditingStyleDelete) {
    PFObject *object = [self.objects objectAtIndex:indexPath.row];
    [object deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        [self loadObjects];
    }];
}

但是说找不到物品

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您尝试的内容是指self.objects,但我没有看到您使用的任何其他地方objects

从表中删除的方法是从数据源中删除然后从表视图中删除。由于您希望从解析中删除对象,因此您还有一个额外的步骤。

// remove from datasource
PFObject *object = itemsArray[indexPath.row];
[itemsArray removeObject:object];

// tell the table to update
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates

// remove from parse
[object deleteInBackground];

请注意,如果您立即查询这些相同的对象,则可能会设置竞争条件。如果存在风险,请使用deleteInBackgroundWithBlock:并在块中进行本地删除。