zoukankan      html  css  js  c++  java
  • iOS CoreData使用笔记

    1.创建CoreData

    2.创建对应实体类

    //
    //  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()
                
                // 创建数据库
                // 1. 实例化数据模型(将所有定义的模型都加载进来)
                // merge——合并
                manager.managedObjectModel = NSManagedObjectModel.mergedModelFromBundles(nil)
                
                // 2. 实例化持久化存储调度,要建立起桥梁,需要模型
                manager.persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: manager.managedObjectModel)
                
                // 3. 添加一个持久化的数据库到存储调度
                // 3.1 建立数据库保存在沙盒的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 打开或者新建数据库文件
                // 如果文件不存在,则新建之后打开
                // 否者直接打开数据库
                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
        }
        
    }
    

      

  • 相关阅读:
    D触发器的使用小结
    CAN通信帧ID的含义解析? (转载)
    mcp2515屏蔽寄存器和过滤寄存器的学习
    spi调试步骤,mcp2515调试整理
    最近工作小结2019.11.24
    Can总线上的电平及物理层仲裁
    can总线学习网上资料汇总
    can总线的远程帧(遥控帧)—说的很形象
    在IAR平台建立STC8ASK64S4A12单片机工程
    cortex-m系列的区别(图解)及今日碎片学习笔记
  • 原文地址:https://www.cnblogs.com/FranZhou/p/5102633.html
Copyright © 2011-2022 走看看