沙盒(自我認識)

沙盒是用來存入緩沖區(qū)的,APP關(guān)掉,緩存被自動清理。

可以寫入沙盒的有字符串

數(shù)組(最簡單的數(shù)組,復(fù)雜的寫入不了(也許可以,但是我還沒有找到方法))

例子:

//? ? 數(shù)組寫入本地

NSArray *arr = [NSArray arrayWithObjects:@"11", @"22", @"33", nil];(這種最簡單的數(shù)組)

//? ? 拼接? (數(shù)組寫入本地后綴可以是xml/plist,? 存入的字典一樣)

NSString *arrPath = [path stringByAppendingPathComponent:@"arr.xml"];

[arr? writeToFile:arrPath atomically:YES];

復(fù)雜數(shù)據(jù)寫入沙盒(稱未歸檔和反歸檔):

- (void)encodeObject:(id)objv forKey:(NSString *)key;

- (void)encodeConditionalObject:(id)objv forKey:(NSString *)key;

- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key;

- (void)encodeInt:(int)intv forKey:(NSString *)key;

- (void)encodeInt32:(int32_t)intv forKey:(NSString *)key;

- (void)encodeInt64:(int64_t)intv forKey:(NSString *)key;

- (void)encodeFloat:(float)realv forKey:(NSString *)key;

- (void)encodeDouble:(double)realv forKey:(NSString *)key;

- (void)encodeBytes:(const uint8_t *)bytesp length:(NSUInteger)lenv forKey:(NSString *)key;

以上是系統(tǒng)里面的類型,也就是可以寫入沙盒的類型,我嘗試將一個復(fù)雜的數(shù)組寫入,但是失敗了,簡單的類型想上面的都可以。

也許你會問上面不是有id類型的么?為什么寫入不了,這個我也不知道,但是我沒寫入進去。

實在解決不了,我是將我申請的數(shù)據(jù),以字符串的形式直接寫入沙盒,然后在用的時候再次解析,本來打算解析完,寫入沙盒,省去再次解析的重復(fù)代碼量,可惜沒成功。

以下 是我的筆記(比較亂):

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *path = [paths lastObject];

NSLog(@"dacuments文件夾的路徑: %@", path);

//? 2.? 簡單對象的讀寫操作

//? ? NSString, NSArray, NSDictionary, NSData...

//? ? 字符串寫入本地

NSString *str = @"王老吉和尹嘯然在一起干什么!";

//? ? 拼接一個文件路徑

NSString *strPath = [path stringByAppendingString:@"/111.txt"];

//? ? 參數(shù)1: 寫入的文件路徑

//? ? 參數(shù)2: 保證寫入文件的時候的 線程 安全

//? ? 參數(shù)3: 編碼格式

//? ? 參數(shù)4: 錯誤信息

NSError *error = nil;

[str writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:&error];

//? ? 讀取

//? ? NSString *readStr = [NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError **)#>]

//? ? 數(shù)組寫入本地

NSArray *arr = [NSArray arrayWithObjects:@"11", @"22", @"33", nil];

//? ? 拼接? (數(shù)組寫入本地后綴可以是xml/plist,? 存入的字典一樣)

NSString *arrPath = [path stringByAppendingPathComponent:@"arr.xml"];

[arr? writeToFile:arrPath atomically:YES];

//? ? 3.復(fù)雜對象寫入本地

Boss *boss = [[Boss alloc] init];

boss.name = @"老管";

boss.number = 30;

boss.sex = @"unknown";

//? ? 將一個實現(xiàn)了NSCoding的協(xié)議的對象寫入本地

//? ? 歸檔類: 使用歸檔類將復(fù)雜對象寫入本地

NSString *bossPath = [path stringByAppendingPathComponent:@"boss.aa"];

[NSKeyedArchiver archiveRootObject:boss toFile:bossPath];

//? ? 反歸檔類(將本地的數(shù)據(jù)重新產(chǎn)生一個新的對象):

Boss *bossReturn = [NSKeyedUnarchiver unarchiveObjectWithFile:bossPath];

NSLog(@"%@", bossReturn.name);

[boss release];


以下是復(fù)雜數(shù)據(jù)寫入沙盒需要的類:

.h文件中(簽協(xié)議,寫屬性就好)

//編碼協(xié)議NSCoding@interface Boss : NSObject@property (nonatomic, retain) NSString *name;

@property (nonatomic, assign) NSInteger number;

@property (nonatomic, retain) NSString *sex;

.m文件中(寫歸檔和反歸檔):

-(void)dealloc

{

[_name release];

[_sex release];

[super dealloc];

}

- (void)encodeWithCoder:(NSCoder *)aCoder

{

//? ? 編碼的方法, 將數(shù)據(jù)編碼成可以寫入本地的狀態(tài)

[aCoder encodeObject:self.name forKey:@"name"];

[aCoder encodeObject:self.sex? forKey:@"sex"];

[aCoder encodeInteger:self.number forKey:@"number"];

}

- (id)initWithCoder:(NSCoder *)aDecoder

{

//? ? 解碼的方法, 從本地讀取數(shù)據(jù), 重新創(chuàng)建對象進行初始化

self = [super init];

if (self) {

self.name = [aDecoder decodeObjectForKey:@"name"];

self.sex = [aDecoder decodeObjectForKey:@"sex"];

self.number = [aDecoder decodeIntegerForKey:@"number"];

}

return self;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容