Có hai điều mà tôi biết:
1) tập tin được tạo ra bởi ứng dụng của bạn (và không phải là một kết quả của việc người dùng sử dụng ứng dụng của bạn) như tập tin văn bản tạm thời để lưu trữ giá trị của một biến, sau đó các tệp này phải được đặt trong Thư viện/Cache thay vì thư mục Tài liệu.
2) Bạn cũng phải đánh dấu tệp có thuộc tính "bỏ qua dự phòng" để yêu cầu iCloud không sao lưu tệp.
Tôi nghĩ rằng bạn có thể bị mất bước 2.
Tôi đã viết một lớp MediaDirectory đơn giản mà nhanh chóng mang lại cho tôi đường dẫn đến các tập tin trong thư mục Library/Cache và cũng thêm thuộc tính bỏ sao lưu.
Sau khi bạn đã lưu tập tin của bạn vào thư mục THƯ VIỆN/Cache, bạn chỉ cần đi một cái gì đó như thế này:
[MediaDirectory addSkipBackupAttributeForFile:@"myTextFile.txt"];
Đây là lớp học đầy đủ:
// Header File
// ----------------------------------------------------------------------
// This class takes a file name (including extension) and returns
// the path to that file in the Library/Cache folder
// ----------------------------------------------------------------------
#import <Foundation/Foundation.h>
@interface MediaDirectory : NSObject
+(NSString *) mediaPathForFileName:(NSString *) fileName;
+(NSString *) mediaPathForFileName:(NSString *) fileName inSubDirectory:(NSString *) subDirectory;
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName;
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName inSubDirectory:(NSString *) subDirectory;
@end
// Implementation File
#import "MediaDirectory.h"
#include <sys/xattr.h>
@implementation MediaDirectory
+(NSString *) mediaPathForFileName:(NSString *) fileName
{
NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDirectory = [directoryPaths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", cachesDirectory, fileName];
return filePath;
}
// if an image needs to be stored in a sub folder called "images"
+(NSString *) mediaPathForFileName:(NSString *) fileName inSubDirectory:(NSString *) subDirectory
{
NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDirectory = [directoryPaths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@/%@", cachesDirectory, subDirectory, fileName];
return filePath;
}
//+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName
{
const char* filePath = [[self mediaPathForFileName:fileName] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName inSubDirectory:(NSString *) subDirectory
{
const char* filePath = [[self mediaPathForFileName:fileName inSubDirectory:subDirectory] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
@end
tôi sẽ đề nghị bạn sử dụng Xcode để tải về một bản chụp của sandbox của ứng dụng của bạn để tận xem các tệp và thư mục nào đang được tạo. Có lẽ PhoneGap đang làm một cái gì đó sôi nổi. Bạn cũng có thể tìm trong thư mục Simulator của ứng dụng. –
Và đảm bảo hiển thị các tệp ẩn vì nhiều thư mục chi tiết bộ nhớ cache/triển khai bị ẩn (ví dụ: lưu trữ tài nguyên bên ngoài của Dữ liệu lõi). –
Nếu tôi nhìn vào thư mục trình mô phỏng, nó sẽ hiển thị một tệp__0.localstorage trong thư mục "Cache" (Applications/app/Library/Caches). Vì vậy, điều đó khẳng định lại suy nghĩ của tôi rằng nó được lưu ở nơi "đúng". –