門戶網址:https://leancloud.cn
對於開發者來說,我們會使用大量數據來存儲將用到的數據。顯然對於新手,或者做獨立開發的童鞋來說,是必定會需要免費,並且不需要另聘維護人員的數據庫的,顯然我們常用的數據庫存儲方式會被摒棄掉,畢竟不是做大型項目,從資金上來說,使用專門的服務器都太過浪費和奢侈,但是對於做獨立產品,以及中大型產品的開發來說,是肯定會需要建立自己的服務器的,畢竟有重要資源需要存儲。
數據存儲
1、數據庫存儲(缺點:數據庫服務器需要一直運行,並且需要維護人員)
2、PHP服務器(缺點: 需要維護人員)
3、雲數據庫存儲(缺點:安全性比不上專門數據庫和PHP服務器的安全係數)
關聯用戶表的創建
//==============創建用戶信息========================//
//用戶信息必須唯一
AVUser *user = [AVUser user];// 新建 AVUser 對象實例
user.username = @"Bell";// 設置用戶名
user.password = @"ssa4f3434";// 設置密碼
user.email = @"[email protected]";// 設置郵箱
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(@"創建失敗");
}else{
AVRelation *relation = [theGAME relationforKey:@"theuser"];
[relation addObject:user];
[theGAME saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (succeeded) {
NSLog(@"關聯成功");
[self addpropertyWith:@"Bell"];
}else{
NSLog(@"關聯失敗");
}
}];
}
}];
以上的代碼,用於建立與用戶信息表相關聯的信息表。
這裏需要注意的是千萬不要忘記創建好了表信息,要使用 saveInBackgroundWithBlock:回調一個BOOL類型的succeeded值。
由於以上的代碼有關聯兩個表的信息,所以我使用了兩個save
注意:這個AVObject saveAllInBackground:@[user] block:^(BOOL succeeded, NSError *error) 回調,必須成功返回回調一個BOOL類型的succeeded值才能進行下面的操作,並且一定要使用 【 saveAllInBackground】進行回調,Background後面跟數組,也就是表名
更新leancloud的方式是
[self editinfoWithusername:更新的屬性字符串 daysocrce:更新的屬性字符串 integral:更新的屬性字符串];
在leancloud上面,我們存儲圖片、文件型的數據,都會上傳到一個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、將圖片轉換爲數據UIImageJPEGRepresentation 這個屬性會要求設置一個壓縮的大小,建議設置爲0.3; UIImagePNGRepresentation 壓縮出來的圖片會比JPEG要小一些,所以我採用了PNG形式的
2、AVFile *file = [AVFile fileWithName:@"隨便寫必須加上圖片後綴名" data:data];
如果上傳成功,你可以在leancloud的AVFile表裏看到你剛纔上傳的圖片地址,複製粘貼到瀏覽器,你就可以看到剛纔上傳的圖片了,上傳成功會返回一個file.url值,而這個值就是你需要的獲取到的信息,你可以將它存儲在其他表裏,從而在網絡請求的時候可以得到這個數據。
當然leancloud也有基本的查詢語句,新的開發人員可以通過下面的代碼進行網絡請求,以獲得存儲的數據
數據的獲取
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);
}
}];
以上是通過表名進行查找。然後對獲取來的數據進行操作
注意:我們獲取下來的是的objects類型的數據,我們要將這個數據轉化爲字典形式【使用代碼 NSMutableDictionary *dic = obj.dictionaryForObject;】
由於這樣獲取下來的數據有很多,看起來不會特別整潔,所以我將多餘不需要的數據給移除掉字典了
條件查找數據
AVQuery *query = [AVQuery queryWithClassName:@"表名"];
[query whereKey:@"字段名" hasPrefix:@"字符串"];
[query selectKeys:@[@"表名"]];
query.limit = 1;//限制條數
[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網絡存儲的基本使用代碼,都特別實用