0

列挙型 NSMoviesDirectory または NSMusicDirectory の使用方法。ドキュメンテーションには、ios 4 以降で使用できると書かれていますが、私のアプリケーションではそこにファイルをコピーする方法が見つかりませんか? そして、それらを使用できないのに、なぜ Apple はそれらの列挙型を追加したのでしょうか?

4

2 に答える 2

1

デフォルトでは、「映画」、「音楽」、「写真」はディレクトリにありません。パスを作成し、データ ファイルを配置する必要があります。

例えば:NSMoviesDirectory

NSArray * paths = NSSearchPathForDirectoriesInDomains (NSMoviesDirectory,NSUserDomainMask, YES);
NSString * documentsDirectory = [paths objectAtIndex:0];
NSError * error;
if (![[NSFileManager defaultManager] fileExistsAtPath: documentsDirectory])
{
   [[NSFileManager defaultManager] createDirectoryAtPath:documentsDirectory withIntermediateDirectories:NO attributes:nil error:&error];
   NSString * resourceDBFolderPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sleep.mp4"];
   [[NSFileManager defaultManager] copyItemAtPath:resourceDBFolderPath toPath:[documentsDirectory stringByAppendingPathComponent:@"sleep.mp4"] error:&error];

}
else
{
   NSString * resourceDBFolderPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sleep.mp4"];
  [[NSFileManager defaultManager] copyItemAtPath:resourceDBFolderPath toPath:[documentsDirectory stringByAppendingPathComponent:@"sleep.mp4"] error:&error];

}
于 2013-03-20T12:43:03.710 に答える
-1

サンプルを書くだけで、音楽ディレクトリ(または他の何か)はデフォルトでは存在しません。コードで作成する必要があります。標本、見本:

- (void)testDir
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSMusicDirectory, NSUserDomainMask, YES);
    NSString *musicDirectory = [paths objectAtIndex:0];
    NSFileManager *defaultFileManager = [NSFileManager defaultManager];
    if (![defaultFileManager fileExistsAtPath:musicDirectory]) {
        [defaultFileManager createDirectoryAtPath:musicDirectory withIntermediateDirectories:NO attributes:nil error:NULL];
    }
    NSString *testDataFilePath = [musicDirectory stringByAppendingPathComponent:@"test.mp3"];
    unsigned int bufferLength = 1024;
    void *buffer = malloc(1024 * sizeof(char));
    NSData *testData = [[NSData alloc] initWithBytes:buffer length:bufferLength];
    free(buffer); buffer = NULL;
    if (![testData writeToFile:testDataFilePath atomically:NO]) {
        NSLog(@"fail to save data");
    }
    [testData release]; testData = nil;
}
于 2013-03-20T12:34:00.103 に答える