2012-10-17 8 views
31

イメージファイルをダウンロードして、NSDocumentDirectoryに保存しようとしています。そのためには、iCloudとiTunesでデータのバックアップをオフにする必要があります。以下は私のコードです:NSDocumentDirectoryでデータバックアップを無効にすると、CFURLSetResourcePropertyForKeyが失敗する

+(void)saveData:(NSData*)thedata:(NSString*)fileName 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:fileName]; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    [fileManager createFileAtPath:localFilePath contents:thedata attributes:nil]; 
    //prevent files from backup on iCloud or iTune 
    NSURL *fileURL = [NSURL URLWithString:localFilePath]; 
    [self addSkipBackupAttributeToItemAtURL:fileURL]; 
} 

と私のaddskipbackupattributetoitematurl用:

+(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)fileURL 
{ 
    if (![[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]]) 
    { 
     NSLog(@"File %@ doesn't exist!",[fileURL path]); 
     return NO; 
    } 
    NSString *currSysVer = [[UIDevice currentDevice] systemVersion];  
    if ([currSysVer isEqualToString:@"5.0.1"]) 
    { 
     const char* filePath = [[fileURL path] fileSystemRepresentation]; 
     const char* attrName = "com.apple.MobileBackup"; 
     u_int8_t attrValue = 1; 
     int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); 
     NSLog(@"Excluded '%@' from backup",fileURL); 
     return result == 0; 
    } 
    else if (&NSURLIsExcludedFromBackupKey) 
    { 
     NSError *error = nil; 
     BOOL result = [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; 
     if (result == NO) 
     { 
      NSLog(@"Error excluding '%@' from backup. Error: %@",fileURL, error); 
      return NO; 
     } 
     else 
     { 
      NSLog(@"Excluded '%@' from backup",fileURL); 
      return YES; 
     } 
    } 
    else 
    { 
     return YES; 
    } 
} 

しかし、BOOL result = [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];は、それが何のスキームを持っていない、このURLを渡されたため、

CFURLSetResourcePropertyForKeyが失敗し、次のメッセージを作成:/var/mobile/Applications/CF69D567-1D37-4053-BFA8-5D0FCBD9C2B2/Documents/coffee.jpg

私はこの問題が発生したのかどうか疑問に思っていますか?

+0

地獄リンゴと...彼らも、この上でエラーを返さないと結果がYESになります。 しかし、これは "ExcludedFromBackupKey"を設定しません。 彼らは私のためにこれを2回拒否しました:( –

答えて

133

解決済み。私は

NSURL *fileURL = [NSURL URLWithString:localFilePath]; 

を変更したら

NSURL *fileURL = [NSURL fileURLWithPath:localFilePath]; 

すべてが完璧に動作します。

+0

は鍵の鍵でした!;-) upvote! – rockstarberlin

+0

これは、さらに2時間のスローガンから私を救った!ありがとうございました! – SexyBeast

+0

あなたは私の人生を救った! –

0

スウィフト

let fileURL = URL(fileURLWithPath: somepath) 
関連する問題