2012-01-04 6 views
2

私がアプリプログラミングを初めて習得して以来、まだ聞いていないことはおそらく他にもたくさんあります。appとstringByAppendingPathComponentのエラーを含むバンドルsqliteデータベース

私は最初にアプリケーション内からデータベースを作成し、それを私の作業フォルダ(おそらく最終的にどこにあるのでしょうか)にコピーしてから、テキストファイルから自分のレコード(約1,000件)を追加しました。

最初に出てくる2つの質問は次のとおりです。 - データベースはどのフォルダに入れるべきですか? - アプリとともにどのように展開されるのですか?

私はpersistentStoreCoordinator関数の次の行を使用して、かなりの数の例が見つかりました:

NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"myDatabase.sqlite"]; 
NSURL *storeUrl = [NSURL fileURLWithPath:storePath]; 

をしかし、最初の行は私に、プリコンパイルエラーを与える:インスタンスメッセージの「レシーバータイプ 『NSURLは』メソッドを宣言していませんセレクタ「stringByAppendingPathComponent:」と。なぜそれが私のために働いていない

そして、これは実際にアプリの残りの部分と私のデータベースをバンドルするための最良の方法です

おかげ

01??!
+0

http://stackoverflow.com/questions/5002250/importing-sqlite-to-coredata – Kjuly

答えて

1

最も簡単な解決策は、NSStringの代わりにNSUrlを使用することです。 SO user @trapperは既に以下のリンクに解決策を提供しています。

importing sqlite to coredata

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Database.sqlite"]; 

// If the database doesn't exist copy in the default one 
if (![storeURL checkResourceIsReachableAndReturnError:NULL]) 
{ 
    NSURL *defaultStoreURL = [[NSBundle mainBundle] URLForResource:@"Database" withExtension:@"sqlite"]; 

    if ([defaultStoreURL checkResourceIsReachableAndReturnError:NULL]) 
    { 
     NSFileManager *fileManager = [NSFileManager defaultManager]; 
     [fileManager copyItemAtURL:defaultStoreURL toURL:storeURL error:NULL]; 
    } 
}