3

アプリに配置され、ビルド フェーズ内event_setup.sqliteのセクションにコピーされたファイルがあります。Copy Bundle Resources

このファイルをリソースからドキュメント ディレクトリにコピーしようとすると、アプリでファイルが見つからないと表示されます。次のコードを使用して、リソースからファイルをコピーし、ファイルが存在しないことを通知しています。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    [self checkAndCreateDatabase: @"event_setup.sqlite"];
    return YES;
}

-(void)checkAndCreateDatabase:(NSString *)name{
    /*----Get the path to the Database----*/
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
    NSString *databasePath = [documentsDir stringByAppendingPathComponent:name];

    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];

    success = [fileManager fileExistsAtPath:databasePath];

    if(success){
        NSLog(@"Database already exists");
        return;
    }
    else{
        NSLog(@"Database does not exist");
        NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:name];

        bool test = [fileManager fileExistsAtPath:databasePathFromApp];
        if(test){
            NSLog(@"file does exist in resources: %@", databasePathFromApp);
        }
        else{
            NSLog(@"file does not exist in resources: %@", databasePathFromApp);
        }

        [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
    }
}

このコードを実行すると、ログに次のように表示されます。

file does not exist in resources: /Users/samrowley/Library/Application Support/iPhone Simulator/6.1/Applications/583D4293-3AD5-45FB-B502-9919F51FDB7B/Test.app/event_setup.sqlite

アプリのクリーニング、Xcode の再起動、ファイルの削除と Xcode への再コピーを試みましたが、何も機能しないようです。

編集:

端末コマンドからの出力:

-rw-r--r--   1 samrowley  staff    2797 11 Feb 10:51 divider.png
-rw-r--r--   1 samrowley  staff    2803 11 Feb 10:51 divider@2x.png
drwxr-xr-x   3 samrowley  staff     102 11 Feb 10:51 en.lproj
-rw-r--r--   1 samrowley  staff    2937 11 Feb 10:51 header.png
-rw-r--r--   1 samrowley  staff    3205 11 Feb 10:51 header@2x.png
4

2 に答える 2

5

この質問に対する答えは、ファイルがターゲットに適切に追加されていないことです。ターゲットに追加するには、ファイルインスペクターに移動する必要があります。ターゲットインスペクターで、そのファイルのアプリ名を確認する必要があります。

于 2013-02-11T14:40:11.010 に答える
2

しばらく私を悩ませていたので、あなたの答え@SamRowleyを見つけてよかったです。私が作成した他のすべてのアプリでは、sqlite データベースは Application Bundle に問題なく表示されたので、今回は何らかの方法で追加したに違いありません。Xcode 7.3.1 のこの写真を含めたのは、名前がわずかに変更されたように見えるためです。この図に示すようにチェックする必要がありTarget Membershipます。そうしないと、ファイルはアプリケーション バンドルにコピーされません。

ここに画像の説明を入力

于 2016-07-07T14:11:36.467 に答える