對于開發(fā)者來說,我們會使用大量數(shù)據(jù)來存儲將用到的數(shù)據(jù)。顯然對于新手,或者做獨(dú)立開發(fā)的童鞋來說,是必定會需要免費(fèi),并且不需要另聘維護(hù)人員的數(shù)據(jù)庫的,顯然我們常用的數(shù)據(jù)庫存儲方式會被摒棄掉,畢竟不是做大型項目,從資金上來說,使用專門的服務(wù)器都太過浪費(fèi)和奢侈,但是對于做獨(dú)立產(chǎn)品,以及中大型產(chǎn)品的開發(fā)來說,是肯定會需要建立自己的服務(wù)器的,畢竟有重要資源需要存儲。
數(shù)據(jù)存儲
1、數(shù)據(jù)庫存儲(缺點(diǎn):數(shù)據(jù)庫服務(wù)器需要一直運(yùn)行,并且需要維護(hù)人員)
2、PHP服務(wù)器(缺點(diǎn): 需要維護(hù)人員)
3、云數(shù)據(jù)庫存儲(缺點(diǎn):安全性比不上專門數(shù)據(jù)庫和PHP服務(wù)器的安全系數(shù))
上面提到的第三點(diǎn),就是我要分享的存儲方式。除此之外,還有其他的云存儲平臺,我選擇了leancloud的數(shù)據(jù)庫存儲,因為就目前來說他發(fā)展得蠻好,并且沒有出現(xiàn)過其他大問題。
關(guān)聯(lián)用戶表的創(chuàng)建
//====================================================創(chuàng)建用戶信息==========================================
//用戶信息必須唯一
AVUser *user = [AVUser user];// 新建 AVUser 對象實例
user.username = @"Bell";// 設(shè)置用戶名
user.password = @"ssa4f3434";// 設(shè)置密碼
user.email = @"0o9sdsf7@qq.com";// 設(shè)置郵箱
AVObject *theGAME = [[AVObject alloc] initWithClassName:@"TheGame"];
[theGAME setObject:@"0" forKey:@"Today_score"];
[theGAME setObject:@"0" forKey:@"user_integral"];
[theGAME setObject:@"Bell" forKey:@"playname"];
[AVObject saveAllInBackground:@[user] block:^(BOOL succeeded, NSError *error) {
if (error) {
NSLog(@"創(chuàng)建失敗");
}else{
AVRelation *relation = [theGAME relationforKey:@"theuser"];
[relation addObject:user];
[theGAME saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (succeeded) {
NSLog(@"關(guān)聯(lián)成功");
[self addpropertyWith:@"Bell"];
}else{
NSLog(@"關(guān)聯(lián)失敗");
}
}];
}
}];
以上的代碼,用于建立與用戶信息表相關(guān)聯(lián)的信息表。
這里需要注意的是千萬不要忘記創(chuàng)建好了表信息,要使用 saveInBackgroundWithBlock:回調(diào)一個BOOL類型的succeeded值。
由于以上的代碼有關(guān)聯(lián)兩個表的信息,所以我使用了兩個save
注意:這個AVObject saveAllInBackground:@[user] block:^(BOOL succeeded, NSError *error) 回調(diào),必須成功返回回調(diào)一個BOOL類型的succeeded值才能進(jìn)行下面的操作,并且一定要使用 【 saveAllInBackground】進(jìn)行回調(diào),Background后面跟數(shù)組,也就是表名
更新leancloud的方式是
[self editinfoWithusername:更新的屬性字符串 daysocrce:更新的屬性字符串 integral:更新的屬性字符串];
在leancloud上面,我們存儲圖片、文件型的數(shù)據(jù),都會上傳到一個AVFile文件里面,下面一上傳一個圖片來舉個??
圖片/文件的上傳
// NSData *data = UIImageJPEGRepresentation([UIImage imageNamed:@"234.jpg"], 1.0);
NSData *data = UIImagePNGRepresentation([UIImage imageNamed:@"10.png"]);
AVFile *file = [AVFile fileWithName:@"thpic.png" data:data];
[file saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
NSLog(@"成功 %@", file.url);//返回一個唯一的 Url 地址
if (succeeded) {
NSLog(@"資料上傳成功");
}else{
NSLog(@"上傳失敗");
}
}];
1、將圖片轉(zhuǎn)換為數(shù)據(jù)UIImageJPEGRepresentation 這個屬性會要求設(shè)置一個壓縮的大小,建議設(shè)置為0.3; UIImagePNGRepresentation 壓縮出來的圖片會比JPEG要小一些,所以我采用了PNG形式的
2、AVFile *file = [AVFile fileWithName:@"隨便寫必須加上圖片后綴名" data:data];
如果上傳成功,你可以在leancloud的AVFile表里看到你剛才上傳的圖片地址,復(fù)制粘貼到瀏覽器,你就可以看到剛才上傳的圖片了,上傳成功會返回一個file.url值,而這個值就是你需要的獲取到的信息,你可以將它存儲在其他表里,從而在網(wǎng)絡(luò)請求的時候可以得到這個數(shù)據(jù)。
當(dāng)然leancloud也有基本的查詢語句,新的開發(fā)人員可以通過下面的代碼進(jìn)行網(wǎng)絡(luò)請求,以獲得存儲的數(shù)據(jù)
數(shù)據(jù)的獲取
AVQuery *query = [AVQuery queryWithClassName:@"表名"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
for (AVObject *obj in objects) {
NSMutableDictionary *dic = obj.dictionaryForObject;
[dic removeObjectForKey:@"className"];
[dic removeObjectForKey:@"createdAt"];
[dic removeObjectForKey:@"objectId"];
[dic removeObjectForKey:@"updatedAt"];
[dic removeObjectForKey:@"__type"];
[self.dataarry addObject:dic];
NSLog(@"%@",dic);
}
}];
以上是通過表名進(jìn)行查找。然后對獲取來的數(shù)據(jù)進(jìn)行操作
注意:我們獲取下來的是的objects類型的數(shù)據(jù),我們要將這個數(shù)據(jù)轉(zhuǎn)化為字典形式【使用代碼 NSMutableDictionary *dic = obj.dictionaryForObject;】
由于這樣獲取下來的數(shù)據(jù)有很多,看起來不會特別整潔,所以我將多余不需要的數(shù)據(jù)給移除掉字典了
條件查找數(shù)據(jù)
AVQuery *query = [AVQuery queryWithClassName:@"表名"];
[query whereKey:@"字段名" hasPrefix:@"字符串"];
[query selectKeys:@[@"表名"]];
query.limit = 1;//限制條數(shù)
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
for (AVObject *avobject in objects) {
NSMutableDictionary *dic = avobject.dictionaryForObject;
[dic removeObjectForKey:@"className"];
[dic removeObjectForKey:@"createdAt"];
[dic removeObjectForKey:@"objectId"];
[dic removeObjectForKey:@"updatedAt"];
[dic removeObjectForKey:@"__type"];
NSLog(@"%@",dic);
}
}];
以上是leancloud網(wǎng)絡(luò)存儲的基本使用代碼,都特別實用