0

バックグラウンドでテーブルにデータを挿入する必要がありNSTimerます。sqliteデータベースのテーブルにデータを挿入するために使用していますが、挿入プロセス中にアプリケーションがフリーズします。使用しNSThreadましたが、同じ問題が発生します。私が使用しているコードを共有しています:

[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(InsertDataInTable) userInfo:nil repeats:NO];

-(void)InsertDataInTempTable
{
        DatabaseManager *objDb=[[DatabaseManager alloc]init];
        [objDb setDelegate:self];
        for(int i=0;i<[arrayTempTableData count];i++)
        {
            [objDb savedata:[dictCurrentUrlInfo objectForKey:TempTableName] elements:[arrayTempTableData objectAtIndex:i]];
        }
}

#pragma mark -
#pragma mark Save Operation

-(void)savedata:(NSString *)into elements:(NSMutableDictionary *)dictInsert{
        NSString *sql_String = @"";
        if([into isEqualToString:TABLEFirstAidTemp])
        {
            sql_String = [NSString stringWithFormat:@"INSERT INTO %@ VALUES('%@', '%@', '%@')", into,[dictInsert objectForKey:@"ArticleNumber"],[dictInsert objectForKey:@"ArticleTitle"],[dictInsert objectForKey:@"ArticleCategory"]];
        }
        sqlite3_exec(sql_Database1, [sql_String UTF8String], nil, nil, nil);
}

この問題を解決するための適切な解決策を教えてください。バックグラウンドでテーブルにデータを挿入したいと思います。前もって感謝します。

4

1 に答える 1

0

解決策は、NSThread を使用することです。多分あなたはそれを間違って実装しました。

コードは次のようになります

-(void)InsertDataInTempTable
{
       [NSThread detachNewThreadSelector:@selector(InsertingData) toTarget:self withObject:nil];
}

-(void)InsertingData
{
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        DatabaseManager *objDb=[[DatabaseManager alloc]init];
        [objDb setDelegate:self];
        for(int i=0;i<[arrayTempTableData count];i++)
        {
            [objDb savedata:[dictCurrentUrlInfo objectForKey:TempTableName] elements:[arrayTempTableData objectAtIndex:i]];
        }
        [pool release];
}

#pragma mark -
#pragma mark Save Operation

-(void)savedata:(NSString *)into elements:(NSMutableDictionary *)dictInsert{
        NSString *sql_String = @"";
        if([into isEqualToString:TABLEFirstAidTemp])
        {
            sql_String = [NSString stringWithFormat:@"INSERT INTO %@ VALUES('%@', '%@', '%@')", into,[dictInsert objectForKey:@"ArticleNumber"],[dictInsert objectForKey:@"ArticleTitle"],[dictInsert objectForKey:@"ArticleCategory"]];
        }
        sqlite3_exec(sql_Database1, [sql_String UTF8String], nil, nil, nil);
}
于 2012-08-20T14:13:00.013 に答える