我有一个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];
}];
}
但是说找不到物品
感谢您的帮助
答案 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:
并在块中进行本地删除。