Я использую панель поиска для выбора записей из таблицы, которая заполнена Sqlite DB.Развертывание таблицы в каждых 120 записях и перезагрузка таблицы в каждых 200 записях.Мои приложения аварийно завершают работу, когда я перетаскиваю таблицу до предела. Когда определенный предел покрывается. Вылетает с ошибкой «дополнительный поток пытается обновить интерфейс». Вот код
if (indexPath.row > limit)
{
llimit = llimit+200 ;
ulimit = ulimit+200 ;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[opq cancelAllOperations];
NSLog(@"before ns operation");
opq = [NSOperationQueue new];
NSInvocationOperation *op = [[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(searchData) object:nil] autorelease];
[opq addOperation:op];
[pool drain];
i++;
limit = limit + 120 ;
}
- (void) searchData {
NSString *databaseName = @"imeating.sql";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString *documentsDir=[documentPaths objectAtIndex:0];
NSString *databasePath=[documentsDir stringByAppendingPathComponent:databaseName];
sqlite3 *database;
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
// Setup the SQL Statement and compile it for faster access
sqlite3_stmt *compiledStatement ;
const char *sqlStatement ;
sqlStatement = "select category_id, upper(subitem_name), subitem_detail_id from subitem_detail where subitem_name LIKE ? order by subitem_name limit ?,?" ;
NSLog(@"inside search b4 wildsearch %@",searchString);
wildSearch = [NSString stringWithFormat:@"%@%@",searchString, @"%"];
if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)
{
sqlite3_bind_text(compiledStatement, 1, [wildSearch UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_int(compiledStatement, 2, llimit);
sqlite3_bind_int(compiledStatement, 3, ulimit);
if (llimit <200){
NSLog(@"with in if limit < 200");
itemArray = [[NSMutableArray alloc] init] ;
}
while (sqlite3_step(compiledStatement) == SQLITE_ROW) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init] ;
NSString *categoryId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
NSString *itemName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
NSString *itemId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
if (ulimit%200 == 0)
{
[newTableView reloadData];
}
[pool drain];
}
}
}
Это происходит на устройстветолько не в симуляторе и ленивая загрузка происходит в табличном представлении.Я использую базу данных sqllite (содержит огромное количество данных) для заполнения таблицы.Я могу перетащить таблицу к определенному диапазону пределов, после чего происходит сбой приложения. Предел сбоя не является постоянным. Пожалуйста, помогите мне реализовать это идеально
Заранее спасибо