2012-09-11 11 views

Trả lời

17

Lưu tệp cục bộ được thay đổi từ iOS5.0 trở về trước, 5.0.1 và 5.1 trở lên chủ yếu là các vấn đề về sao lưu địa chỉ iCloud. Có hai nguồn tài liệu của Apple (các File System Programming Guide, và QA1719) cùng nhau cung cấp các thông tin hỗ trợ như sau:

  • iOS 5,0

tập tin sẽ được lưu trong "Caches" thư mục, là có không có cách nào để ngăn chặn sao lưu nếu chúng được lưu trữ trong thư mục Tài liệu. Lưu ý rằng hệ thống có thể xóa các tệp này (xem QA1719), vì vậy, bạn sẽ cần khả năng tạo lại từng tệp nếu cần. Để tìm thư mục lưu trữ, sử dụng này:

[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] 
  • iOS 5.0.1

tập tin sẽ được lưu trong '/ Library/Application Support' (FSP, trang 15), có thể tốt hơn truy cập thông qua:

[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject] 

Kinh nghiệm của tôi là thư mục này không phải lúc nào tồn tại, và do đó bạn có thể cần phải tạo ra nó:

- (NSString *)applicationAppSupportDirectory 
{ 
    return [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject]; 
} 

NSFileManager *manager = [NSFileManager defaultManager]; 
NSString *appSupportDir = [self applicationAppSupportDirectory]; 
if(![manager fileExistsAtPath:appSupportDir]) { 
    __autoreleasing NSError *error; 
    BOOL ret = [manager createDirectoryAtPath:appSupportDir withIntermediateDirectories:NO attributes:nil error:&error]; 
    if(!ret) { 
     NSLog(@"ERROR app support: %@", error); 
     exit(0); 
    } 
} 

Các tệp được lưu vào thư mục này (hoặc thư mục con) cần thuộc tính mở rộng để cho iCloud không sao lưu chúng (xem QA1719).

PS: Tôi chưa tìm thấy cách đặt mục tiêu Triển khai cho bản phát hành này, nếu có cách xin vui lòng để lại nhận xét.

  • iOS 5,1

Files (hoặc thư mục của file) nên được đặt ở thư mục 'Hỗ trợ ứng dụng' như đã mô tả ở trên. Để ngăn iCloud sao lưu sử dụng:

[URL setResourceValue: [NSNumber numberWithBool: YES] forKey:NSURLIsExcludedFromBackupKey error:&error] 

như được mô tả trong QA1719. Lưu ý rằng bạn có thể áp dụng khóa này vào một thư mục để ngăn không cho nội dung của nó được sao lưu. Phương thức hoàn chỉnh từ QA1719:

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL 
{ 
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); 

    NSError *error = nil; 
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] 
            forKey: NSURLIsExcludedFromBackupKey error: &error]; 
    if(!success){ 
     NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error); 
    } 
    return success; 
} 
+0

+1 để phân biệt bằng bản phát hành iOS. cảm ơn nhiều! –

+2

Nếu tôi sử dụng thư mục '/ Library/Application Support', tại sao tôi phải đặt NSURLIsExcludedFromBackupKey? Đó không phải là toàn bộ ý tưởng của thư mục đó KHÔNG sao lưu mọi thứ trong đó? Tôi biết bạn nói đúng, nhưng trong đầu tôi không có ý nghĩa gì cả. – Toydor

+1

Bạn không cần đặt giá trị này - nếu bạn đã nói một cơ sở dữ liệu về thông tin quan trọng bạn muốn sao lưu, thì đừng đặt cờ. Mặt khác, nếu dữ liệu không quan trọng thì hãy đặt nó. Quyết định là của bạn. –