Невозможно удалить строку из таблицы - PullRequest
0 голосов
/ 20 марта 2012

В моем приложении я не могу удалить строку из таблицы.Содержимое табличного представления приходит в виде веб-ответа (GET), и я отображаю его в табличном представлении, я отображаю некоторые его детали во втором контроллере представления (нажатие при нажатии на строку в индексе ...) Может кто-нибудь помочь, пожалуйста?Вот некоторые из моих кодов: (в viewDidLoad)

 sharedDa= (BNT_AppDelegate *)([[UIApplication sharedApplication]delegate]);
    mm= [[sharedDa messagesDict]objectForKey:@"message"];//mm is NSDictionary

mm содержит несколько свойств (таких как дата, сообщение ..), и я думаю, что мне нужно удалить объект по индексу из словаря.Как я могу справиться с этой ситуацией?

EDIT-2: Вот мой объект JSON;

{
    button = 30;
    message =     (
                {
            date = "2012-03-21 20:13:10";
            message = "message 1";
        },
                {
            date = "2012-03-21 20:13:42";
            message = "asdf nkop jp?l?f";
        },
                {
            date = "2012-03-22 10:06:11";
            message = "test local notification message";
        },
                {
            date = "2012-03-22 10:06:41";
            message = "second test of uilocalnotification";
        },
                {
            date = "2012-03-22 10:08:13";
            message = "third test of notification";
        }
    );
}

А вот мой код инициализации:

sharedDa= (BNT_AppDelegate *)([[UIApplication sharedApplication]delegate]);
//mm is mutableDictionary and the others are mutable array
        mm= [[sharedDa messagesDict]objectForKey:@"message"];
       // NSLog(@"JSON message: %@", [sharedDa messagesDict]);
        buttonVersion= [sharedDa.messagesDict objectForKey:@"button"];
        mySecondArray= [mm valueForKey:@"date"];
        myIDsArray=[mm valueForKey:@"ID"];

Я проанализировал изменяемый словарь и инициализировал различные изменяемые массивы, вот мой метод делегата для удаления строки;

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source


        NSLog(@"Thread: %@", [NSThread currentThread]);

        [self.myIDsArray removeObjectAtIndex:indexPath.row];
         [self.myArray removeObjectAtIndex:indexPath.row];
         [self.mySecondArray removeObjectAtIndex:indexPath.row];
         [self.buttonVersion removeObjectAtIndex:indexPath.row];
        //
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; }   }

Мое приложение вылетает, и в консоли я получаю эти три строки:

Thread: <NSThread: 0x75719d0>{name = (null), num = 1}
[Switching to process 1472 thread 0x10a03]
(gdb) 

Я знаю, это стало очень длинным вопросом, но кто-нибудь может дать мне идею?

1 Ответ

1 голос
/ 20 марта 2012

Во-первых: назовите ваши переменные немного читабельными, mm выглядит немного глупо.

Допустим, у вас есть три разных объекта в вашем словаре, создайте три разных NSMutableArray s для хранения этих объектов и вДля реализации

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

используйте метод removeObjectAtIndex: для всех ваших массивов.

...