3

次のコード スニペットを使用して、アプリケーション リソース ディレクトリからドキュメント領域にファイルをコピーしようとしています。Github のPocketOCRプロジェクトから以下を使用しました。

// Set up the tessdata path. This is included in the application bundle
    // but is copied to the Documents directory on the first run.
    NSString *dataPath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"tessdata"];
    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSLog(@"Datapath is %@", dataPath);
    // If the expected store doesn't exist, copy the default store.
    if (![fileManager fileExistsAtPath:dataPath ]) {
        NSLog(@"File didn't exist at datapath...");
        // get the path to the app bundle (with the tessdata dir)
        NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
        NSString *tessdataPath = [bundlePath stringByAppendingPathComponent:@"tessdata"];
        if (tessdataPath) {
            [fileManager copyItemAtPath:tessdataPath toPath:dataPath error:NULL];
        }
    }

これは、上記の呼び出しから得られる出力です。

2012-06-06 14:53:42.607 MyApp[1072:707] データパスは /var/mobile/Applications/9676D920-D6D1-4F86-9177-07CC3247A124/Documents/tessdata データ ファイル /var/mobile/Applications/9676D920 を開くときにエラーが発生しました-D6D1-4F86-9177-07CC3247A124/Documents/tessdata/eng.traineddata

私のxcodeプロジェクトにeng.traineddataファイルがあります

をチェックしようとすると、エラーが報告されているようですfileExistsAtPath。これがエラーをスローするとは思わず、YES または NO を返すと思います。

ファイルをコピーする簡単な方法はありeng.traineddataますか、またはここで修正できる間違いを犯しましたか?

私のxcodeプロジェクトにeng.traineddataファイルがあります

4

4 に答える 4

4
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;

NSString *dataPath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"tessdata"];
NSLog(@"Datapath is %@", dataPath);

// If the expected store doesn't exist, copy the default store.    
    if ([fileManager fileExistsAtPath:dataPath] == NO)
    {
        NSString *tessdataPath = [[NSBundle mainBundle] pathForResource:@"eng" ofType:@"traineddata"];
        [fileManager copyItemAtPath:tessdataPath toPath:dataPath error:&error];

    }


-(NSString*) applicationDocumentsDirectory{
    // Get the documents directory
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docsDir = [dirPaths objectAtIndex:0];
    return docsDir;
}
于 2012-06-07T05:15:36.733 に答える
0

stringByAppendingPathComponent:@"tessdata"

上記の行では、tessdataが物理フォルダー(青色のフォルダー)であり、Xcodeプロジェクトのグループ(表示されている黄色のフォルダー)ではないことが必要です。Finderを使用してXcodeプロジェクトフォルダにフォルダを作成し、Xcodeでフォルダをプロジェクトにドラッグアンドドロップし、要求されたらフォルダ参照を選択します。

于 2012-06-06T14:59:19.023 に答える