已完成:
- 完善了web網頁界面的視圖內容
- 改進了點擊cell后web網頁的加載邏輯(由點擊后一次全部加載改為點擊后先只加載當前點擊的一個,后面滑動到新頁的時候再加載新的web網頁)
- 學習了FMDB第三方庫的使用,并實作了收藏功能



收藏功能的實作思路是:當點擊收藏按鈕的時候,創建FMDB資料庫,并將需要用到的值插入資料庫,并改變收藏按鈕的imageView,后續再點擊時則分情況處理,若已收藏則取消收藏,改回收藏按鈕的imageView,并洗掉資料庫中當前頁面的相應資料,當滑動scrollView到新頁面時,遍歷資料庫,判斷當前頁面是否收藏從而加載其收藏按鈕的imageView,最后當點擊我的收藏cell查看已收藏內容時,先將需要用到的資料從庫中取出并存到一個陣列中便于后續使用,然后利用存好資料的陣列加載tableView,并撰寫cell的點擊事件,最后在加載收藏cell的Controller中利用ViewController的生命周期重繪收藏的tableView即可實作整個收藏功能,
學到的內容:
- FMDB第三方庫的基本使用和簡單機制
- 利用viewController的生命周期重繪視圖
遇到的問題:
由于FMDB資料庫插入資料時會自動將資料轉換為字串插入,所以若要插入陣列,則要先將陣列轉換為json型別的字串,再將該字串插入資料庫,最后取出資料時先取出json字串,然后將該字串轉換為陣列即可,但是資料想要轉換為json型別的字串需要滿足以下要求,否則無法成功轉換:
頂層物件必須是NSArray或者NSDictionary
所有的物件必須是NSString/NSNumber/NSArray/NSDictionary/NSNull的實體
所有NSDictionary的key必須是NSString型別
數字物件不能是非數值或無窮;
另外,想要一次向資料庫中插入多種資料時,需要注意:
在第一次建庫的時候就要宣告多種型別,否則第一次建庫成功之后再去修改創表時該庫中的資料型別時由于庫已存在,代碼不會重復執行建庫,所以就沒有效果:
代碼如下:
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *fileName = [doc stringByAppendingPathComponent:@"agreeTestSecond.sqlite"];
//FMDatabase表示一個SQLite資料庫,用來執行SQL陳述句
FMDatabase *dataBase = [FMDatabase databaseWithPath:fileName];
if ([dataBase open]) {
//創建表
//在此處第一次建表時就要宣告例如下方括號中的多種id型別,就可以后續存入多種型別的值
BOOL result = [dataBase executeUpdate:@"CREATE TABLE IF NOT EXISTS t_agreeOrder (id TEXT, idSecond TEXT, idThird TEXT, idFourth TEXT);"];
if (result) {
NSLog(@"創表成功");
} else {
NSLog(@"創表失敗!");
}
}
}
另外,FMDB資料庫插入值時不管是什么種類的值,都是按順序一個一個插入,取值時也是按順序一個一個取出,所以在需要取出值的時候就需要注意這一點,
補充:
將json字串轉換為陣列時可以使用JSONKit第三方庫,也可使用Apple自帶的NSJSONSerialization,但是NSJSONSerialization的效率遠高于JSONKit
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/351099.html
標籤:其他
下一篇:華為iot 應用側 開發
