2013-12-05 3 views
1

Я загружаю массив предметов из plist. Пользователь может выбрать любой элемент и добавить его в новый массив элементов, который отображается на экране.iOS Удаление объекта из массива

Я делаю это, но пользователь также может удалить игрока из любой строки. Моя проблема в том, что пользователь удаляет объект, который перетасовывает список вверх. Где я хочу сохранить эту строку пустой.

Мой делеция код:

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

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSString *user_id = [prefs objectForKey:@"user_id"]; 
    NSString *fixture_id = [prefs objectForKey:@"fixture_id"]; 

    // Get path to documents directory 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                 NSUserDomainMask, YES); 


    [self.usersSelectionArray removeObjectAtIndex:indexPath.row]; 

    if (self.usersSelectionArray == nil) { 

     // disable swipe to delete? 
    } 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    if ([paths count] > 0) 
    { 
     // Path to save array data 
     NSString *arrayPath = [[paths objectAtIndex:0] 
           stringByAppendingPathComponent:[NSString stringWithFormat:@"%@-%@",user_id, fixture_id]]; 

     // Write array 
     [self.usersSelectionArray writeToFile:arrayPath atomically:YES]; 
    } 

    // If blank array delete the file as not required 
    if (self.usersSelectionArray.count == 0) { 

     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@-%@", user_id, fixture_id]]; 

     NSError *error; 
     if(![[NSFileManager defaultManager] removeItemAtPath:path error:&error]) 
     { 
      //TODO: Handle/Log error 
     } 
    } 

    [self.tableView reloadData]; 
} 

Он также проверяет, если счетчик равен 0 и удаляет PLIST, воссоздает на нагрузке, если требуется.

ответ

0

Итак, вы хотите удалить объект из своего массива данных, но сохранить в нем пустую ячейку?

В этом случае я рекомендую заменить удаленный объект экземпляром NSNull.

[myMutableArray replaceObjectAtIndex:index withObject:[NSNull null]]; 

Вы можете проверить, если объект для ячейки NSNull и возвращает пустую ячейку в методе источника cellForRowAtIndexPath: данных.

id object = // get the correct object from your data array, depending on the index 
BOOL isEmpty = [object isKindOfClass:[NSNull class]]; 
if (isEmpty) { 
    // return empty table cell 
else { 
    // return a normal cell 
} 
+0

Спасибо! Это сработало: D, что бы я сделал, если бы захотел повторно вставить объект в этот индекс? –

+0

Замените объект 'NSNull' своим объектом и перезагрузите таблицу. Или что вы имеете в виду? – DrummerB

+0

В принципе, если они удаляют строку 2, а затем возвращают строку 2 и выбирают игрока, он просто добавляет элемент в нижнюю часть массива с сохранением объекта NULL. –

0

Вместо [self.usersSelectionArray removeObjectAtIndex:indexPath.row];, попробуйте [self.usersSelectionArray replaceObjectAtIndex:indexPath.row withObject:[NSNull null]];. Это будет содержать строку, но она будет содержать практически ничего.

Смежные вопросы