1

いくつかのプロジェクトを含む MonoTouch ソリューションがあります。プロジェクトの 1 つは、実行可能なプロジェクトです。./Resources/db.sqlite3 という SQLite3 データベース ファイルがあります。プロパティで BundleResource に設定されています。次に、最初のプロジェクトのテスト プロジェクトがあります。

テスト プロジェクト内から最初のプロジェクトのデータベースをロードする方法はありますか? データベース ファイルをテスト プロジェクトにコピーする以外に (これは理想的ではありません)、方法が見つかりませんでした。

NSBundle.MainBundle.PathForResource("db", "sqlite3"); 

テスト プロジェクト内からは何も見つかりません。

内部のテストプロジェクトに目を通す

/Users/me/Library/Application Support/iPhone Simulator/6.0/Applications/{GUID}/Test.app/ 

実際のプロジェクト アセンブリは表示されません。単なるエイリアスです。クラスファイルに引き続きアクセスでき、データベース以外のすべてのテストに合格するため、これが想定されている方法のようです。

グーグルは何も発見していません。ここで検索することもありません。既に存在するアセンブリ内から物をロードするだけです。

4

3 に答える 3

2

iOS アプリケーション間でファイルを共有することはできません (少なくともデバイス上では)。

必要なファイルのパスを知っている (たとえば、絶対パスを使用する) か推測する場合は、シミュレーターを使用してこれを回避できます。

これをデバイスで実行 (またはテスト) する場合は、機能しないことに注意してください。

実際のプロジェクト アセンブリは表示されません。単なるエイリアスです。

場合によっては (シミュレーターのみ)、MonoTouch はファイルをコピーする代わりにシンボリックリンクを使用します。これにより、シミュレーターでの編集/ビルド/デバッグ サイクルが高速化されます。

于 2012-12-05T21:33:55.527 に答える
0

svnの提案を調べて試してみると、同僚と私は、プロジェクト内の既存のファイルへのリンクを追加できることに気づきました。

アプリプロジェクトではすべて同じものを残しました。次に、テストプロジェクトで:

  1. フォルダを右クリックして、[追加]->[ファイルの追加...]を選択します。
  2. アプリプロジェクトからデータベースファイルを選択します
  3. [OK]をクリックします
  4. ポップアップで「ファイルへのリンクを追加」を選択します
  5. [OK]をクリックします

これで、テストプロジェクトにdb.sqlite3ファイルへのリンクがあり、すべてのデータベーステストに合格しました。

ソリューションに向けてご案内いただきありがとうございます。

また、Resourcesという名前のフォルダーを作成したのではなく、予約されていることを知っています。データベースのコピーを保持するために使用しているだけです。/ Documentsにコピーして使用し、書き込みできるようにします。

于 2012-12-06T13:31:37.027 に答える
0

「リソース」をフォルダー名として使用することはお勧めできず、問題が発生する可能性があると思います。また、ビルドアクションを「コンテンツ」に設定する必要があります

メイン アプリ プロジェクトで、ファイルに含まれるプロジェクトを参照します。db ファイルを含むプロジェクトから少なくとも 1 つのクラス/オブジェクトをインスタンス化します。これはダミークラスにすることができます。これで、コンパイラは、コンパイル時にビルド アクション 'Content' を使用して、参照されているプロジェクトからすべてのコンテンツをアプリ バンドルにコピーします。

于 2012-12-05T23:15:03.317 に答える