私はこの問題に 1 週間取り組んできましたが、Google でスタック オーバーフローを検索し、約 40 件の投稿を読みましたが、まだ問題を解決できません。1. sqlite データベースを作成し、データをプリロードするためのテスト アプリを作成しました。2.myApp を作成し、プリロードされた DB をリソース フォルダーにコピーしました。3.DBを取得するために次のコードを書きました:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (!self.myDataBase) {
NSURL *url = [self localDocumentsDirectoryURL];
url = [url URLByAppendingPathComponent:@"myDB/"];
self.myDataBase = [[UIManagedDocument alloc] initWithFileURL:url];
}
return YES;
}
-(NSURL*)localDocumentsDirectoryURL {
static NSURL *localDocumentsDirectoryURL = nil;
if (localDocumentsDirectoryURL == nil) {
NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory,NSUserDomainMask, YES ) objectAtIndex:0];
localDocumentsDirectoryURL = [NSURL fileURLWithPath:documentsDirectoryPath];
}
return localDocumentsDirectoryURL;
}
- (void)useDocument
{
if (![[NSFileManager defaultManager] fileExistsAtPath:[self.ICCarDataBase.fileURL path]])
{
[self.ICCarDataBase saveToURL:self.ICCarDataBase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {}];
}
else
{
[self.ICCarDataBase openWithCompletionHandler:^(BOOL success) {}];
}
}
- (void) setICCarDataBase:(UIManagedDocument *)carDataBase
{
if (_ICCarDataBase != carDataBase) {
_ICCarDataBase = carDataBase;
[self useDocument];
}
}
次に、シミュレーターで myApp を実行すると、myApp は DB データを正常に取得し、iPhone で実行すると myApp は DB データを取得できません。SDK のバージョンが重要かどうかはわかりませんが、シミュレーターは iphone 5.1 で、私の iPhone は 5.0 (ジェイルブレイク) です。また、アプリで 5.1 固有の機能を使用していません。
最初にDataBaseをドキュメントディレクトリにコピーして機能させる必要があると言う人もいます。私は解決策を試しましたが、シミュレーターでは問題なく動作しますが、iPhoneにはデータがありません。さらに、iTool を使用して iphone フォルダーを調べたところ、myDB フォルダーは既にドキュメント dir にあります。投稿では、ソリューションがここにあることを示唆しています: UIManagedDocument を使用して iOS 5 にコア データ データベースをプリロードする
他の人は、persistentStoreCoordinator を直接使用する必要があると言っています。しかし、暗黙のpersistentStoreCoordinator自体を作成するため、UIManagedDocumentは私の状況で機能すると思います。
myApp の何が問題なのかについて何か提案はありますか?
そして、iosがsqlite DBを2層のフォルダーでラップし、実際のsqlite db persisentStoreに名前を付ける理由を誰でも教えてくれますか?