2012-08-07 27 views
5

Przeczytałem wytyczne dotyczące przechowywania danych firmy Apple i jestem naprawdę zdezorientowany, gdzie powinienem przechowywać pliki bazy danych sqlite, które tworzę w mojej aplikacji. Chcę czytać z plików sqlite, nawet gdy aplikacja jest w trybie Offfline. Czytałem, że takie pliki powinny być przechowywane w Bibliotece/pamięciach podręcznych za pomocą zestawu flag "Nie twórz kopii zapasowych". Proszę zasugerować mi właściwe podejście do robienia tego samego.Czy powinienem napisać plik bazy danych sqlite do katalogu Documents lub Library/Caches?

Odpowiedz

5

Odpowiedź zależy od tego, jak pliki baz danych są tworzone:

According to the Data Storage Guidelines page:

  1. tylko dokumenty i inne dane, które są generowane przez użytkowników, albo że nie może inaczej być odtworzone przez aplikację , należy przechowywać w katalogu/Documents i zostanie automatycznie skopiowany przez iCloud.

  2. Dane, które można ponownie pobrać lub zregenerować, należy zapisać w katalogu/Library/Caches. Przykłady plików należy umieścić w katalogu pamięci podręcznej obejmują bazy danych plików pamięci podręcznej i treści do pobrania, takich jak używane przez magazyn, gazetę, i aplikacji map.

To wydaje mi się dość oczywiste: jeśli aplikacja programowo tworzy coś lub generuje dane, które chcesz zapisać, umieścić go w folderze „buforuje”. Jeśli jest to coś wyjątkowego, co sam klient generuje (poprzez wpisanie na klawiaturze lub coś, co ręcznie interweniował i zrobił), umieść go w "Dokumentach".

„nie zapasowa” oznacza, że ​​pliki nigdy wysyłane do iCloud i jeśli zgubić, muszą być ponownie tworzone od podstaw (lub ponownie zainstalować).

+0

Opracowałem aplikację w pełni statyczną. Przechowuję dane powyżej 4 mb. Bez tej zawartości aplikacja nie będzie działać. W moim przypadku, gdzie powinienem zapisać lokalną bazę danych (folder dokumentów lub folder biblioteki)? – Warrior

+0

[Cóż, widzę, że już zadałeś to pytanie jako osobne pytanie] (http://stackoverflow.com/questions/16767861/where-to- save-the-local-db-created-for-iphone-app), więc albo ja (albo ktoś inny) pójdzie szukać odpowiedzi dla ciebie –

+0

A co z nowymi rozszerzeniami i zegarkiem? –

1

To może ci pomóc. Kopiowanie bazy danych do katalogu dokumentów będzie wystarczająco dobre, Pliki w pakiecie są tylko do odczytu, W niektórych sytuacjach Jeśli chcesz zaktualizować w dowolnym momencie, lepszym sposobem jest najpierw skopiowanie bazy danych, jeśli nie istnieje w katalogu dokumentów.

Przykładowy kod do kopiowania bazy danych z dokumentami katalogu jest następujący:

-(void) checkAndCreateDatabase { 

    // Setup some globals 
    NSString *databaseName = @"AnimalDatabase.sql"; 

    // Get the path to the documents directory and append the databaseName 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 


    // Check if the SQL database has already been saved to the users phone, if not then copy it over 
    BOOL success; 

    // Create a FileManager object, we will use this to check the status 
    // of the database and to copy it over if required 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    // Check if the database has already been created in the users filesystem 
    success = [fileManager fileExistsAtPath:databasePath]; 

    // If the database already exists then return without doing anything 
    if(success) return; 

    // If not then proceed to copy the database from the application to the users filesystem 

    // Get the path to the database in the application package 
    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; 

    // Copy the database from the package to the users filesystem 
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil]; 

    [fileManager release]; 
} 

Można odwołać tę Tutorial Pliki, zawartość w dokumentach katalog jest czytać, tryb zapisu, dzięki czemu można odczytać zawartość z bazy danych.