有兩件事情,我所知道的:
1)由您的應用程序生成的文件(並使用你的應用程序的用戶)如臨時文本文件來存儲變量的值不是一個結果,那麼這些文件必須放置在庫/緩存中而不是文檔目錄中。
2)您還必須使用「skip-backup」屬性標記文件以告知iCloud不要備份文件。
我想你可能會丟失步驟2
我寫了一個簡單MediaDirectory類快給我的路在圖書館/緩存文件夾中的文件,並添加跳過備份屬性。
後您保存文件到Libary/Cache文件夾,你只需去是這樣的:
[MediaDirectory addSkipBackupAttributeForFile:@"myTextFile.txt"];
下面是完整的類:
// 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
我會建議你使用Xcode中下載應用程式的沙箱中的快照採取看看哪些文件和目錄正在創建。也許PhoneGap正在做一些有趣的事情。你也可以看看應用程序的Simulator目錄。 –
並確保顯示隱藏的文件,因爲許多緩存/實現細節目錄是隱藏的(例如:核心數據外部資源存儲)。 –
如果我查看模擬器目錄,它會在「Caches」目錄(Applications/app/Library/Caches)中顯示一個file__0.localstorage。所以這再一次證明了我的想法,即它被保存在「正確的」地方。 –