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
Odpowiedź zależy od tego, jak pliki baz danych są tworzone:
According to the Data Storage Guidelines page:
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.
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ć).
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.
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
[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 –
A co z nowymi rozszerzeniami i zegarkiem? –