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的主要内容,如果未能解决你的问题,请参考以下文章
无论如何要从 Swift 中的 socket.io 方法返回一些东西吗?