① IOS 存儲方式(PList、NSUserDefaults、歸檔、CoreData、資料庫、文件)
iOS開發,plist文件讀寫那些事 - (jianshu.com)
NSUserDefaults存儲輕量級 的本地數據 ,比如要保存一個登陸界面的數據,用戶名、密碼之類的。
支持的數據類型有 NSString、 NSNumber、NSInteger、NSFloat、BOOL、NSArray、NSDictionary、NSDate、 等系統定義的數據類型。
用NSUserDefaults存儲的數據下次程序運行的時候依然存在 .它的數據存儲在應用程序內置的一個plist文件里, 在/Library/Prefereces沙盒路徑下.
NSUserDefaults是定時把緩存中的數據寫入磁碟的,而不是即時寫入,為了防止在寫完NSUserDefaults後程序退出導致的數據丟失,可以在寫入數據後使用synchronize強制立即將數據寫入磁碟:
使用NSKeyedArchiver 對數據進行 歸檔 反歸檔(將自定義類型轉換為NSData類型:)
NSuserDefaults 的坑
iOS 最終,我還是決定放棄使用NSUserDefaults了 - (jianshu.io)
歸檔: ,就是將數據寫到一個文件裡面去。一般我們的應用的變數常量之類的數據都是在內存裡面的,只要APP關閉,這些數據都會丟失。但是把數據存儲到文件裡面去,就能將數據保存到本地磁碟裡面(目前iOS基本就是在沙盒裡面操作了),不管是APP關閉還是重啟設備,下次啟動APP的時候都能夠讀出來。
解檔: (別人也叫反歸檔),就是將數據從文件裡面讀取出來。在程序裡面使用。
【iOS】數據持久化:使用NSKeyedArchiver進行數據歸檔 - (jianshu.com)
iOS 開發Core Data使用方法 – 技術狗 (jishudog.com)
IOS 開發文件操作——NSFileManager - 星語海藍 - 博客園 (cnblogs.com)
(15條消息) iOS文件操作_你有故事,我囿酒-CSDN博客
參考:
iOS開發 - 關於 NSUserDefaults 的使用 - (jianshu.com)
② iOS 開發如果涉及數據和表的持久化,Core Data 比 SQLite 更好嗎
這兩個東西我都用過,兩者都能實現對資料庫的操作,功能上需求都能滿足。
先前在公司實習的時候,原先項目中用的是SQLite,感覺操作很直接。如果先前有一點資料庫和SQL基礎的話,寫起來會感覺很親切,都是一些資料庫操作的語句。但是當操作變多之後,語句越來越多,就很煩,代碼比較多,看起來也會混亂一塵喚些。
後來新項目中嘗試了CoreData,因為蘋果一直在推這個東西。CoreData用起來比直接sql語句方便許多,而且很適合進行代碼封裝、重構。其實後來在用CoreData的時候,參照RestKit的ObjectMapping和CoreData部分對其進行了少量封裝,使得CoreData用起來非常方便。例如:添加一條User數據
User *user = [User object];
user.name = @"example";
[objectStore save];
後來做開發一直都在用CoreData,主要是我覺得用起來太方便了,代碼能夠精簡許多。另外,
App升級之後資料庫欄位或者表有更改會導致crash,CoreData的版本管理和數據遷移變得非常有用,手動寫sql語句操此兄滑作還是麻煩一些。
CoreData不光能操縱SQLite,CoreData和iCloud的結合也很好,如果有這方面需求的話優先考慮CoreData。
CoreData並不是直接操縱資料庫,比如:使用CoreData時不能設置資料庫的主鍵,目前仍需要手動操作。
效率上其實跑程序時感覺不出來,畢竟手機上的數據不能跟網站的數據和訪問量相提並論。
總的來說,個人比較喜歡用CoreData,因為自己比較熟悉,使用起來也非常方便。
PS:既然你一直在CoreData,就應該堅持用下去,除非是真的碰到很致命的無法解決問題。中途換掉既有的自己熟悉的東森臘西,費時費力,實際用起來沒區別,得不償失。
轉載
③ ios coredata怎麼創建多張表
1)先創建需要的實體表(方法見"CoreData單表創建使用")
Course, Section, Teacher 表
2)建立關聯 設置刪除關系,對應關系如下(設置的具體含義已在文章第二部分介紹)
課程_教師 (一課程可包含多個教師,刪除關系:作廢)
課程_章節(一節課可包含多個章節,刪除關系:級聯)
章節_課程(一個章節只屬於一個課程,刪除關系:作廢)
教師_課程(一個教師可以講多門課,刪除關系:作廢)
創瞎做建之後查看style關系:
表關系
3)使用創建的對象生成相應地文件:.h和.m(方法見"CoreData單表創建使用")
根據3個對象創建的文件
根據設置的對象之間的對應關系 會生成相應地屬性和方法Section對應一個課程團指時 添加課程對象的屬性
課程對應的章節以及教師都是多個,生成NSSet 存儲 並生成相應方法
NSSet 是一個無序的集合 ,可以使用NSSet 與NSArray根塌神配據需要轉換使用,其他使用方法 同單表使用的增刪查改,只是訪問時多層訪問.
如:NSPredicate*predict = [NSPredicate predicateWithFormat:@"section_course.courseId = %d",courseId];
如:self.courseEntity.course_teacher.count
coreData多表關聯的基本操作已做一個簡單的介紹,具體的功能還待使用者發掘,並且蘋果提供了NSFetchController 與coreData結合使用.
④ ios開發coredata怎麼修改數據
coredata為資料庫模型,修改的話只要修改coredata文件里仔中面的欄位,源戚睜同時修改映射模型裡面對應的欄位。做好相應的關聯就好!就怕關聯做不好容易出問題,而且這種問題還不雹歲容易排查!
⑤ 蘋果手機升級了iS0.10 手機衛士里的隱私空間閃退怎麼辦
有兩種情況的閃退:
1、點擊「隱私空間」閃退到首頁
影響:無法進入隱私空間,但是不會導致隱私空間文件丟失;
解決辦法1:官方說會盡快發布下一個版本修復,不著急的話可以稍等幾天;
解決方法2:使用ifunbox將將手機上「SystemExpert」下面「Library/.strongbox/.coredata」目錄導出,發給Q群里的技術支持【淺淺】,人工修復後再發給你導入上述目錄就可以了。
切記:請千萬不要卸載App,否則隱私空間的數據就無法恢復了!!
2、打開手機衛士閃做碼豎退
原因:通過第三方助手軟體安裝手機衛士,升級純大到iOS8以後無法打開且無法修復,這是蘋果對第三方助手軟體做的限制,必須使用AppleID下載App才能解決,具體方法是:
1)如果之前隱私空間里有數據,請通過ifunbox等工具把手機衛士隱私空間的文件導出被分到電腦上,然後卸載,登錄App Store重新下載和安裝手機衛士,然後再利用ifunbox導入備份的文件即可;
2)如果之前隱私空間里沒有數據,可直接卸載並登錄App Store重新安裝手機衛士即可;
還沒有升級的同學,可以檢查一下現在版本的隱私空間里設置的自動鎖定時間,模或如果是「從不」,請改為其它選項然後再升級到最新版本,就不會出現閃退的問題了。
⑥ ios 可以把appdelegate裡面的coredata相關的寫到新的類裡面嗎
沒有像MySQL裡面那樣的autoincrement欄位,但是Core Data每條數賣枝據存儲時都會自動生成一個全局唯一的NSManagedObjectID,這個ID可以通爛並過以下方式獲得:
NSManagedObjectID *moID = [managedObject objectID];
這個飢配跡ID轉成string後是類似於EE13EA1E-D5F4-4E38-986D-3F4B0B03AEE4/Data/a66這樣的字元串,因此你不能用它來做排序,它是用來做唯一數據標識的。
如果你確實想要一個向MySQL那樣的數字自增欄位,可以自己加自動實現一下,也很簡單,獨立一個表或在info.list裡面保存一個lastMaxID,插入數據的時候每次+1就成了。
希望我的回答可以幫到你
⑦ iosapp寫緩存
在iOS應用程序中, 緩存數據有不同的方法。
使用NSUserDefaults進行數據緩存。 NSUserDefaults是一個可用於長期持久存儲數據值棗彎的存儲介面,它是基於property list文件進行存困清儲的。您可以使用它來存儲一些簡單的鍵值對,例如用戶設置, 版本信息等。
使用NSCache進行緩存。NSCache類可以在內存中存儲對象,當內存緊張時,系統會自動清除緩存中最少使用的對象, 以便為當前的對象騰出空間。
使用CoreData進行數據緩存。CoreData是一個對象關系映射器(Object Relational Mapper, ORM), 它可以處理持久化的對象數據。
使用文件緩存。您可以凳尺悶將數據保存到文件中,並在需要時從文件中讀取。相對於NSUserDefaults或NSCache,文件緩存更為靈活,並且可以存儲大量數據。
總之,緩存數據的方法因應用程序和使用場景而異。請根據實際需求和應用背景選擇適當的緩存方式。
⑧ ios 裡面coredata怎麼使用
搜扣丁學堂,有很多關於iOS中的CoreData的講解: Core Data數據持久化是對SQLite的一飢洞個升級,它是ios集成的,在說Core Data之前,我們先爛旁枯說說在CoreData中使用的幾個類。 (1)NSManagedObjectModel(被管理的對象模型) 相當於實體,不過它包含 了實體間的關系 (2)NSManagedObjectContext(被管理的對象上下文) 操作實際內容 作用:插入數據 查詢 更新 刪除 (3)NSPersistentStoreCoordinator(持久化存儲助理) 相當於資料庫的連接器 (4)NSFetchRequest(獲取數據的請求) 相當於查詢語句 (5)NSPredicate(相當於查詢條件) (6)NSEntityDescription(實體結構) (7)後綴名為.xcdatamodel的包 裡面的.xcdatamodel文件,用數據模型編輯器編輯 編譯後為.momd或.mom文件,這就是為什麼文件中沒有這個東啟褲西,而我們的程序中用到這個東西而不會報錯的原因