2011-07-09 5 views
1

NSDocumentDirectoryまたはNSBundle resourcePath with Sqlite?私たちはここに最初にNSDocumentDirectoryとパスを検索し、なぜ私は思っていた

我々はNSBundleからこの時間resourcePathを使用して、別のパスでこのパスを比較する上
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"Sports.sqlite"]; 

以降:

NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] 
             stringByAppendingPathComponent:@"Sports.sqlite"]; 
success = [fileManager copyItemAtPath:defaultDBPath 
           toPath:writableDBPath error:&error]; 

何両方の違いは?

答えて

1

この状況では、データベースを復元する必要がある場合を除いて、読み取り専用のバンドルからデータベースをドキュメントディレクトリにコピーして、ユーザーが読み書きできるようにします。これは、データベースを事前にシードしたり、構造を設定したりする場合に便利です。

あなたのドキュメントディレクトリは読み書き可能ですので、bundleはありません。したがって、documentsディレクトリにsqliteディレクトリを適切に使用する必要があります。

  1. コードの最初の部分は、単にあなたのdocumentsディレクトリに生きるsqliteファイルを配置したい場所のパスを取得しています。最終的にはwritableDBPathで開催されます。

  2. 次はあなたがbundledefaultDBPath)からのパスを取得し、これはあなたがあなたのバンドルで提供読み取り/書き込みデータベースを与える

    ... copyItemAtPath:defaultDBPath toPath:writableDBPath ... 
    

に二つのパスを使用しています。スキーマを作成するためにデバイス上でSQLを実行する代わりに、これを行う理由は何ですか?これにより、データベースに何らかのデータを事前にシードできます。場合によっては、グラフィカルツールを使用してsqliteファイルを設定して編集する方が簡単です

+0

ありがとう!この「グラフィックツール」について、どうやって入手できますか?もう一度ありがとう – Paul

+0

おそらく最高のグーグルグーグルがいくつかありますが、いくつか試していますが、私は個人的にはFirefox用のSQLマネージャプラグインが好きです。それはERDのものではありませんが、コマンドラインを使うよりも簡単に表を見たり操作したりすることができます。 –

+0

okありがとうPaul! – Paul

1

2つのパスを「比較する」とはどういう意味ですか?

私が見るものは、アプリリソースディレクトリからユーザードキュメントディレクトリへのファイルコピーです。

したがって、アプリケーションにバンドルされる(したがってリソースディレクトリで利用可能な)Sports.sqliteのデフォルトバージョンは、ユーザーが変更できるユーザーディレクトリにコピーされます。

コードの最初のチャンクは、単に宛先パス(文字列)を作成します。 2番目のチャンクはソースパス(文字列)を作成し、コピーを作成します。

意味がありますか?

+0

ありがとうございます。 – Paul

関連する問題