アプリケーションが毎秒サスペンド/バックグラウンドモードになっているときにローカルsqliteデータを読み取り/更新する方法は? 以下は、私が今やろうとしているコードです。毎秒ローカル Sqlite テーブルに存在するすべての ID を NsLog したいだけですが、それを行うことはできません。私が間違っていることを教えてもらえますか、または次のコードを修正できますか。 前もって感謝します
-(void)applicationDidEnterBackground:(UIApplication *)app
{
if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4
if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking
UIApplication *application = [UIApplication sharedApplication]; //Get the shared application instance
__block UIBackgroundTaskIdentifier background_task; //Create a task object
background_task = [application beginBackgroundTaskWithExpirationHandler: ^ {
[application endBackgroundTask: background_task]; //Tell the system that we are done with the tasks
background_task = UIBackgroundTaskInvalid; //Set the task to be invalid
//System will be shutting down the app at any point in time now
}];
//Background tasks require you to use asyncrous tasks
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timerSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, backgroundQueue);
dispatch_source_set_timer(timerSource, dispatch_time(DISPATCH_TIME_NOW, 0), 1*NSEC_PER_SEC, 0*NSEC_PER_SEC);
dispatch_source_set_event_handler(timerSource, ^{
[self BackGroundTaskFunction];
});
dispatch_resume(timerSource);
}
}
}
-(void)BackGroundTaskFunction
{
[self GetUserName]
if (recordArray.count>0)
{
for (int i=0; i<recordArray.count; i++)
{
DB_data *db=(DB_data *)[recordArray objectAtIndex:i];
Nslog(@"%d",db.Id);
}
}
}
-(void)GetUserName{
self.recordArray = [[NSMutableArray alloc] init];
{
const char *sql = "select * from UserName";
sqlite3_stmt *selectStatement;
int returnValue = sqlite3_prepare_v2(database, sql, -1, &selectStatement, NULL);
if(returnValue == SQLITE_OK)
{
while(sqlite3_step(selectStatement) == SQLITE_ROW)
{
[recordArray addObject:[[DB_data alloc] initwithDataSet:sqlite3_column_int(selectStatement, 0) UserName:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 1)]]];
}
}
else
{
printf( "could not prepare statemnt: %s\n", sqlite3_errmsg(database) );
}
}
}