2012-09-09 63 views
0

我有一個簡單的表格存儲在常見的 sqlite數據庫的應用程序。該應用程序有一個mainview和幾個其他意見說,view1, view2, ....,viewN。從mainview,用戶去view1該代碼段:iOS:使用單例或不使用訪問sqlite數據庫

screen.modalTransitionStyle=UIModalTransitionStyleCoverVertical; 
     [self presentModalViewController:screen animated:YES]; 

view1,用戶將訪問數據庫,做一些事情,然後更新數據庫,相當view1mainview

[self dismissModalViewControllerAnimated:YES]; 

用戶將爲其他視圖執行相同的操作,即訪問數據庫,執行某些操作,更新數據庫,然後返回mainview

我的問題是我應該如何組織數據庫在我的情況下,使用一個單獨創建一個共同的目標在mainview打開數據庫,然後將所有的意見都會訪問數據庫,更新,或每個視圖將打開數據庫,訪問它,然後單獨更新或有其他任何有效的方法。謝謝

回答

2

正如你所描述的,你的應用程序的結構只有一個線程 - 使用單例完全沒問題。您只需在應用程序啓動時打開數據庫一次,並確保在應用程序結束時關閉它,或者甚至應用程序轉到後臺時關閉它(當然,您也需要在從後臺返回時打開數據庫)

順便說一下,我也試圖打開和關閉每個視圖的數據庫 - 這也很好。在這種方法中我有時也使用「髒」標誌,它被設置爲表明DB需要關閉之前updateing - 但橫空出世,使在性能上沒有差異。

除了使用單例,您還可以使用類變量或在您的應用程序委託中聲明它,這通常是爲核心數據的cotext完成的(核心數據中的「上下文」類似於您的數據庫情況)

什麼是重要的,無論你使用的方法是,您的數據庫將處於一致的狀態,因爲你的應用程序可以得到通過電話,例如「中斷」的所有時光。

順便說一句,我傾向於更頻繁地使用iPhone上的核心數據,如果情況允許,因爲核心數據需要很多的DB問題的關心 - 僅在節能狀態一致需要顯式地完成。但它確實取決於您的數據是更大的數據庫還是隻是「一些」persitent對象/屬性。

0

我建議避免調用一個SQLite數據庫C水平碼 - 嘗試過的SQLite一個簡單的包裝 - 看到https://github.com/JohnGoodstadt/EasySQLite

此使用,當你「連接」到它單身:

self.db = [DBController sharedDatabaseController:@"MyDB.sqlite"]; 

的任何文件然後可以訪問共享的單例 - 例如

int personCount = [_db ExecuteScalar:@"SELECT count(*) FROM person" asInt:YES]; 

DataTable* table = [_db ExecuteQuery:@"SELECT firstname,lastname FROM person"]; 

for (NSArray* row in table.rows) 
{ 
    NSString* firstname = row[0]; 
    NSString* firstname = row[1]; 
    ... 
}