iOS:查找要从服务器中删除的项目的 NSArray

Posted

技术标签:

【中文标题】iOS:查找要从服务器中删除的项目的 NSArray【英文标题】:iOS: Finding the NSArray of an item to delete from server 【发布时间】:2015-11-18 23:05:06 【问题描述】:

我正在使用来自 API 的通知对 TableView 实施“滑动删除”。我创建了一个方法,当我硬编码通知 id(它是一个数组)时删除通知。问题是我不知道如何获取要删除的确切通知 ID。

有 TableView Delegate 和 TableView Data Source 方法可以以某种方式获取通知 id,所以我想我应该能够出于我的方法的目的获取它,但我已经没有想法了。

这是我的 API 源代码:

  desc 'delete notifications'
  params do
    requires :notification_ids, type: Array
  end
  delete 'notifications/remove', root: :notifications, each_serializer:      NotificationSerializer do
    require_authentication!
    NotificationLogic.delete_notifications params[:notification_ids], current_user
    current_user.notifications
  end

删除通知的方法如下:

-(void)deleteNotificationWithId:(NSArray*)ids withCompletionHandler:(DeleteNotificationCompletionHandler)handler

    NSDictionary* params = @ @"notification_ids" : ids ;

__weak typeof(self) weakSelf = self;
ReadNotificationRequest* req = [ReadNotificationRequest new];
req.notificationIds = ids;

[_objectManager deleteObject:nil
                     path:@"user/notifications/remove"
               parameters:params
                  success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 
                      _secondTry = NO;
                      NSArray* arr = mappingResult.array;
                      [self notififyAboutNotifications:arr];
                      handler(YES, arr, nil);
                   failure:^(RKObjectRequestOperation *operation, NSError *error) 
                      if (operation.HTTPRequestOperation.response.statusCode == 401 && !_secondTry)
                      
                          [weakSelf relogin:^
                              [weakSelf deleteNotificationWithId:ids withCompletionHandler:handler];
                          ];
                          return;
                      
                      handler(NO, nil, error);
                  ];

NotificationTableView 中方法的实现。它有效,但我用数字硬编码数组:

-(void)setNotifications:(NSMutableArray *)notifications
_notifications = notifications;
[self reloadData];



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

    //Remove item in array
    [self.notifications removeObjectAtIndex:indexPath.row];

    // Also remove that row from the table view with an animation
    [tableView deleteRowsAtIndexPaths:@[indexPath]
                     withRowAnimation:UITableViewRowAnimationFade];

    //Remove hard-coded notification from server
    [[Api sharedInstance]deleteNotificationWithId:@[@756]
                            withCompletionHandler:^(BOOL succes, Message *response, NSError *error) 
                                if(succes)

                                 else 
                                    [Utils alert:error.pop_message];
                                
                            ];


#pragma mark TableView Data Source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

return self.notifications.count;


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

NotificationTableViewCell* cell = [self dequeueReusableCellWithIdentifier:@"NotificationTableViewCell"];
[cell configureCellWithNotification:self.notifications[indexPath.row]];

return cell;


#pragma mark - UITableViewDelegate

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Notification* not = self.notifications[indexPath.row];
[self.notificationDelegate notificationTapped:not];

【问题讨论】:

当用户滑动删除时,您不能使用您在删除行方法中获得的索引路径从数据数组中获取 ID,然后在后台线程中将其发送到您的服务器(1 ID = 1 个请求), 如果多个 ID 有 1 个请求,您应该创建一个按钮来确认删除 【参考方案1】:

这段代码

//Remove item in array
[self.notifications removeObjectAtIndex:indexPath.row];

在您需要之前删除您需要的信息。不要删除它,而是先读出 ID,然后将其删除并使用 ID。

【讨论】:

你是对的!我后来放了这段代码,就可以读取ID了

以上是关于iOS:查找要从服务器中删除的项目的 NSArray的主要内容,如果未能解决你的问题,请参考以下文章

iOS ipa包瘦身---删除无用图片资源

查找并删除重复的代码

无论如何要从 Swift 中的 socket.io 方法返回一些东西吗?

需要帮助了解为啥要从我的所有列表中删除数据

iOS: Sqlite数据库的功能:建表,增加,删除,修改,查找

ios开发怎么查找ios工程的版本号