iOS CoreData使用筆記

1.創(chuàng)建CoreData

2.創(chuàng)建對(duì)應(yīng)實(shí)體類

//
//  UserInfo.swift
//  
//
//  Created by Fran on 15/7/31.
//
//

let APP_CORE_DATA_ENTITY_NAME_USERINFP = "UserInfo"

import Foundation
import CoreData

@objc(UserInfo) class UserInfo: NSManagedObject {

    @NSManaged var userId: String
    @NSManaged var name: String
    @NSManaged var portraitUri: String

}

// 注意代碼中的 @obj(ClassName) 必須要寫, 屬性前的 @NSManaged 也是不可或缺的

3. 操作類(增刪改查)

//
//  UserInfoManager.swift
//  ECExpert
//
//  Created by Fran on 15/7/31.
//  Copyright (c) 2015年 Fran. All rights reserved.
//

import UIKit

class UserInfoManager: NSObject {
    
    private var managedObjectContext: NSManagedObjectContext!
    private var managedObjectModel: NSManagedObjectModel!
    private var persistentStoreCoordinator: NSPersistentStoreCoordinator!
    
    private override init() {
        super.init()
    }
    
    class func shareManager() -> UserInfoManager{
        struct SingleManager{
            static var token: dispatch_once_t = 0
            static var singleManager: UserInfoManager!
        }
        
        dispatch_once(&SingleManager.token, { () -> Void in
            let manager = UserInfoManager()
            
            // 創(chuàng)建數(shù)據(jù)庫(kù)
            // 1. 實(shí)例化數(shù)據(jù)模型(將所有定義的模型都加載進(jìn)來)
            // merge——合并
            manager.managedObjectModel = NSManagedObjectModel.mergedModelFromBundles(nil)
            
            // 2. 實(shí)例化持久化存儲(chǔ)調(diào)度捌蚊,要建立起橋梁龟再,需要模型
            manager.persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: manager.managedObjectModel)
            
            // 3. 添加一個(gè)持久化的數(shù)據(jù)庫(kù)到存儲(chǔ)調(diào)度
            // 3.1 建立數(shù)據(jù)庫(kù)保存在沙盒的URL
            let basicPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).first
            let filePath = basicPath!.stringByAppendingString("/").stringByAppendingString(APP_PATH_CHAT_USERINFO)
            let url = NSURL(fileURLWithPath: filePath)
            
            // 3.2 打開或者新建數(shù)據(jù)庫(kù)文件
            // 如果文件不存在,則新建之后打開
            // 否者直接打開數(shù)據(jù)庫(kù)
            do {
                try manager.persistentStoreCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
                manager.managedObjectContext = NSManagedObjectContext()
                manager.managedObjectContext.persistentStoreCoordinator = manager.persistentStoreCoordinator
                SingleManager.singleManager = manager
            } catch let error as NSError {
                KMLog("\(error.localizedDescription)")
            } catch {
                fatalError()
            }
        })
        
        return SingleManager.singleManager
    }
    
    func queryUserInfoById(userId: String) -> NSMutableArray{
        let array = NSMutableArray()
        let predicate = NSPredicate(format: "userId = '\(userId)'")
        let request = NSFetchRequest(entityName: APP_CORE_DATA_ENTITY_NAME_USERINFO)
        request.predicate = predicate
        
        let rs = try? managedObjectContext.executeFetchRequest(request)
        if rs != nil{
            for u in rs!{
                KMLog("\(u.userId) \(u.name) \(u.portraitUri)")
                array.addObject(u)
            }
        }
        
        return array
    }
    
    func addUserInfo(userId: String, name: String, portraitUri: String) -> Bool{
        let queryArray = queryUserInfoById(userId)
        if queryArray.count == 0{
            let userInfo = NSEntityDescription.insertNewObjectForEntityForName(APP_CORE_DATA_ENTITY_NAME_USERINFO, inManagedObjectContext: managedObjectContext) as! UserInfo
            userInfo.userId = userId
            userInfo.name = name
            userInfo.portraitUri = portraitUri
            
            do {
                try managedObjectContext.save()
                return true
            } catch _ {
                return false
            }
        }else{
            return updateUserInfo(userId, updateDic: ["name": name, "portraitUri": portraitUri])
        }
    }
    
    func removeUserInfoById(userId: String) -> Bool{
        var result = false
        let request = NSFetchRequest(entityName: APP_CORE_DATA_ENTITY_NAME_USERINFO)
        request.predicate = NSPredicate(format: "userId = '\(userId)'")
        
        let rs = try? managedObjectContext.executeFetchRequest(request)
        if rs != nil{
            for u in rs!{
                KMLog("\(u.userId) \(u.name) \(u.portraitUri)")
                managedObjectContext.deleteObject(u as! NSManagedObject)
            }
            do {
                try managedObjectContext.save()
                result = true
            } catch _ {
                result = false
            }
        }
        
        return result
    }
    
    func updateUserInfo(userId: String, updateDic: NSDictionary!) -> Bool{
        var result = false
        let request = NSFetchRequest(entityName: APP_CORE_DATA_ENTITY_NAME_USERINFO)
        request.predicate = NSPredicate(format: "userId = '\(userId)'")
        
        if updateDic != nil && updateDic.count > 0{
            let rs = try? managedObjectContext.executeFetchRequest(request)
            if rs != nil{
                for u in rs!{
                    KMLog("\(u.userId) \(u.name) \(u.portraitUri)")
                    for (key, value) in updateDic{
                        u.setValue(value, forKey: key as! String)
                    }
                }
                
                do {
                    try managedObjectContext.save()
                    result = true
                } catch _ {
                    result = false
                }
            }
        }
        
        return result
    }
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末不脯,一起剝皮案震驚了整個(gè)濱河市烘贴,隨后出現(xiàn)的幾起案子到推,更是在濱河造成了極大的恐慌仿滔,老刑警劉巖嘉裤,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廊驼,死亡現(xiàn)場(chǎng)離奇詭異据过,居然都是意外死亡惋砂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門绳锅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來西饵,“玉大人,你說我怎么就攤上這事鳞芙【烊幔” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵原朝,是天一觀的道長(zhǎng)驯嘱。 經(jīng)常有香客問我,道長(zhǎng)喳坠,這世上最難降的妖魔是什么鞠评? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮壕鹉,結(jié)果婚禮上剃幌,老公的妹妹穿的比我還像新娘。我一直安慰自己御板,他們只是感情好锥忿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怠肋,像睡著了一般敬鬓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笙各,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天钉答,我揣著相機(jī)與錄音,去河邊找鬼杈抢。 笑死数尿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的惶楼。 我是一名探鬼主播右蹦,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼歼捐!你這毒婦竟也來了何陆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤豹储,失蹤者是張志新(化名)和其女友劉穎贷盲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剥扣,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巩剖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年铝穷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佳魔。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡曙聂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吃引,到底是詐尸還是另有隱情筹陵,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布镊尺,位于F島的核電站朦佩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏庐氮。R本人自食惡果不足惜语稠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弄砍。 院中可真熱鬧仙畦,春花似錦、人聲如沸音婶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衣式。三九已至寸士,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碴卧,已是汗流浹背弱卡。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留住册,地道東北人婶博。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像荧飞,于是被迫代替她去往敵國(guó)和親凡人。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • iOS CoreData介紹和使用(以及一些注意事項(xiàng)) 最近花了一點(diǎn)時(shí)間整理了一下CoreData叹阔,對(duì)于經(jīng)常使用S...
    Pocket閱讀 22,816評(píng)論 34 92
  • 該文章屬于劉小壯原創(chuàng)划栓,轉(zhuǎn)載請(qǐng)注明:劉小壯[http://www.reibang.com/u/2de707c93d...
    劉小壯閱讀 26,994評(píng)論 75 85
  • 一.文章概要 當(dāng)前使用工具是XCode7. 這篇文章主要是寫了對(duì)于基本數(shù)據(jù)類型的"增刪改查"的操作,至于特殊類型比...
    春田花花幼兒園閱讀 2,779評(píng)論 6 12
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法条获,內(nèi)部類的語法,繼承相關(guān)的語法蒋歌,異常的語法帅掘,線程的語...
    子非魚_t_閱讀 31,598評(píng)論 18 399
  • 不知道為什么就想起來去年夏天的時(shí)候去買人字拖委煤。老板一直吹噓人字拖怎么牢固讓我用力扯,我愉快地試了一下確實(shí)扯不斷修档。老...
    嗜睡青貓閱讀 1,566評(píng)論 1 8