Получите неожиданный «EXC_BAD_ACCESS» - PullRequest
0 голосов
/ 26 мая 2011

Когда я удаляю ячейку из таблицы: возникает эта ошибка:

Program received signal:  “EXC_BAD_ACCESS”.
warning: Unable to read symbols for /Xcode3.2.5/Platforms/iPhoneOS.platform/DeviceSupport/4.3.2 (8H7)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found).

Здесь я удаляю объект из ячейки и его событие из каландра:

if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        //Get the object to delete from the array.
        lovkid *mykids = (lovkid *)[appDelegate.actionarray1 objectAtIndex:indexPath.row];
        appDelegate.actionId = mykids.Id;

        //delete from calender
        if( [ mykids.Event isEqualToString:@"empty"])
        {
        }
        else
        {
            EKEvent* event2 = [appDelegate.eventStore eventWithIdentifier:mykids.Event];
            if (event2 != nil) 
            {  
                NSError* error = nil;
                [appDelegate.eventStore removeEvent:event2 span:EKSpanThisEvent error:&error];
            } 
        }

        //delete end
        [mykids deleteAction];
        [appDelegate.actionarray1 removeObjectAtIndex:indexPath.row];

        //Delete the object from the table.
        [localTable deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        [localTable reloadData];
        a = 0;
    }
    else 
    {
        //NSLog(@"test");
    }

Удалить из БД:

deleteStmt1 = nil;
    if(deleteStmt1 == nil) 
    {
            const char *sql = "delete from actions where id = ?";
            if(sqlite3_prepare_v2(database1, sql, -1, &deleteStmt1, NULL) != SQLITE_OK)
                NSAssert1(0, @"Error while creating delete statement. '%s'", sqlite3_errmsg(database1));

    //When binding parameters, index starts from 1 and not zero.
        sqlite3_bind_int(deleteStmt1, 1,(int)appDelegate.actionId);

        if (SQLITE_DONE != sqlite3_step(deleteStmt1)) 
            NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(database1));

        sqlite3_reset(deleteStmt1);
        sqlite3_finalize(deleteStmt1);
    }

В чем причина этой ошибки?

1 Ответ

1 голос
/ 26 мая 2011

Я бы предложил удалить строку:

    [localTable deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

Если вы перезагружаете таблицу на reloadData, удалять строку таким способом не обязательно.Таблица будет перезагружена в соответствии с новым состоянием источника данных.

С другой стороны, вы можете исследовать beginUpdates и endUpdates, если вы хотите более гладкого обновления таблицы.В этом случае имеет смысл использовать deleteRowsAtIndexPaths.

. Не знаю, разрешит ли это ваш сбой.В случае, если это не так, я предлагаю вам выполнить в отладчике, чтобы вы могли точно выяснить, какой оператор является оскорбительным, вызвавшим сбой.

...