2012-01-25 5 views
1

sqlite dbをカスタムバンドルに入れて、複数のプロジェクトでそのバンドルを使用したいとします。バンドル内のsqlite dbパスにアクセスしますか?

私はMac OS X FrameWork &ライブラリ - >バンドルから新しいターゲットを作成しました。ターゲットをビルドして、sqlite dbをバンドルに入れました。 バンドルをiOSプロジェクトに追加し、そこからdbを読み込もうとしました。

ここで問題が発生します:バンドルを取得してその識別子を読み取ることができますが、dbのパスを取得しようとするとnull戻り文字列が返されます。

デシベルパス読むためのコード:

NSBundle *myDbBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle]pathForResource:@"myDbBundle" ofType:@"bundle"]]; 
NSLog(@"BundleIdentifier:%@",[myDbBundle bundleIdentifier]); 
NSString *databasePath = [myDbBundle pathForResource:@"myDbName" ofType:@"sqlite"]; 
NSLog(@"DataBasePath:%@",databasePath); 

どれ暗示し、この問題に関するドキュメントやチュートリアルがウェルカムです。

更新: 私はそれを読み込もうとすると失敗するのですが、バンドルをロードできないようです。

コード:

NSError *error; 
    NSLog(@"LoadBundle:%@",[myDbBundle loadAndReturnError:&error][email protected]"yes":@"no"); 
    NSLog(@"Error:%@",[error localizedDescription]); 

だから、本当のproblmeは私がiOSアプリから読み取ることができるのsqliteのDBと魔女を配置魔女でバンドルを作成するにはどうすればよいのですか?バンドルを作成するには、Mac OS Xでxcodeテンプレートを使用しましたので、ビルド設定で何かを変更する必要があると思いますが、何が分からないのでしょうか。 >リソース - - >設定バンドル さて、ここで私が何をしたか、まず、新しいファイル:

+1

あなたは(ファインダーなどで)バンドル自身の中で見ればそこにDBファイルのですか? –

+0

はい、あります。 –

答えて

4
NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"myDbName" ofType:@"sqlite"]; 

はあなたのメインバンドル

EDITの内側にあなたのmyDbName.sqliteへのパスを取得するのに十分良いことがあります新しいものを作成し、myDbBundleという名前を付けて、新しく作成したバンドルを右クリックし、myDbName.sqliteを追加し、en.lprojの内部にないことを確認します。また、新しいバンドルを作成するときは、ターゲットを現在のターゲットに含めるようにチェックします。これは、これがSettings.bundleではないため、そのバンドルを含めたいからです。その後、コードを実行し、それは正常に動作します。

enter image description here

、ここでは、私はそれが正常に私はこの自分自身を行っていない

+0

-1最初に質問を読んでから答えてみてください。 –

+0

大丈夫、私の悪い、私は本当に急いで質問に答えるべきではありません。あなたのコードが完璧に動作していることを確認できます。myDbName.sqliteがmyDbBundle.bundleに正しく追加されていない可能性がありますか?myDbName.sqliteは実際にバンドル内のフォルダに含まれていますか? –

+0

最初の編集で、私は投票を削除できます。新しいバンドルを作成し、それにsqlite dbを追加しました。あなたはどうしましたか?どのような手順ですか? myDbBundleが表示されるので、私は質問を編集します。バンドルをロードできませんでした。私はまた、フォルダの外側と外側にあるmyDbName.sqliteでテストしました。 –

1

をロードしています意味正しい値を、プリントアウトされ

NSBundle* bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"myDbBundle" ofType:@"bundle"]]; 
NSLog(@"%@", bundle); 
NSString* test = [bundle pathForResource:@"myDbName" ofType:@"sqlite"]; 
NSLog(@"%@", test); 
NSDictionary* dict = [NSDictionary dictionaryWithContentsOfFile:[bundle pathForResource:@"Root" ofType:@"plist"]]; 
NSLog(@"%@", dict); 

NSLog(@"%@", dict);を使用していますが、このコードであり、あなたがしようとしているものと思われるブログUniversal framework iPhone iOS 2.0

これは、任意のファイルをパッケージ化して、必要に応じて他のプロジェクトに簡単にインポートすることができます。

+0

答えがThxのため、私はそれを知っています。私が望むのは、フレームワークではなくバンドルだけです。 –

0

スウィフト3

let dbname = Bundle.main.path(forResource: "horoscope-release", ofType: "sqlite")!

関連する問題