2013-10-07 134 views
2

我一直在研究一個問題幾個小時,並會感謝任何外部輸入。我是iOS,Objective-C和SQLite的新手,並嘗試執行SQLite Update語句。問題在於UI凍結並似乎掛在SQLite中的一個進程中。SQLite數據庫在更新時掛起

下面的代碼:

NSString *docsPath = [paths objectAtIndex:0]; 
NSString *path = [docsPath stringByAppendingPathComponent:@"SQLite3Database.sqlite"]; 
SQLite3_instance *db = [SQLite3_instance databaseWithPath:path]; 
[db open]; 

NSString *execUpdate = [NSString stringWithFormat:@"update ListItem set status=%i,message=\"%@\",GPSLong=%@, GPSLat=%@,lastUpdated=DateTime('now') where userID = %@",[Status_Picker selectedRowInComponent:0],messageTextField.text , longitude, latitude,loggedinUserID]; 
NSLog(@"execUpdate: %@", execUpdate); 
if (![db executeUpdate:execUpdate]) 
    NSLog(@"Data insert failed %@", db.lastErrorMessage); 

此代碼是在IBAction爲點擊一個UIButton後執行,但正如前面提到的,UI是一個過程掛斷了電話。從上面的代碼的輸出是下面的:

* execUpdate:更新列表項設置狀態= 0,消息= 「」,GPSLong = 44.48916,GPSLat = 6.28739,LASTUPDATED =日期時間( '現在'),其中用戶ID = 1 *

任何人都可以看到這個代碼是如何掛起來的嗎?

看起來問題是Xcode內存泄漏。經過幾個小時的衝擊,我的腦袋再次撞到牆壁,關閉並重新啓動,解決了問題。

+0

你不應該格式化sql語句(注入等)。使用參數。請參閱:http://stackoverflow.com/questions/10424043/right-way-of-inserting-data-into-sqlite-db-iphone/10424264#10424264 – bryanmac

回答

1

您確定另一個進程/線程沒有針對數據庫打開一個事務嗎?這會導致這種行爲。

+0

問題再次出現,這是問題。接得好!爲了使功能正常工作,我爲每個視圖控制器打開了一個新的Sqlite數據庫實例(我知道不是很好的做法)。我已經改變了這一點,通過viewcontrollers傳遞實例化的實例。 –