GVKun编程网logo

将图像存储到CoreData-Swift(图像如何存储)

9

关于将图像存储到CoreData-Swift和图像如何存储的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于coredataswift简单入门、CoreData入门使用增删改查swift、C

关于将图像存储到CoreData-Swift图像如何存储的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于coredata swift 简单入门、CoreData 入门使用 增删改查 swift、CoreData 数据库迁移升级笔记--swift、CoreData 未与 SwiftUI 中的列表视图同步等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

将图像存储到CoreData-Swift(图像如何存储)

将图像存储到CoreData-Swift(图像如何存储)

在我的代码中,我设法用CoreData保存了textLabel,但似乎无法正确保存图像。我已经阅读了一些教程,并且知道必须将其转换为NSData。但是我该怎么做呢?

提前致谢!

答案1

小编典典

核心数据并不是要保存图像等大的二进制文件。而是在文件系统中使用文档目录。

这是实现此目的的示例代码。

let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as! String// self.fileName is whatever the filename that you need to append to base directory here.let path = documentsDirectory.stringByAppendingPathComponent(self.fileName)let success = data.writeToFile(path, atomically: true)if !success { // handle error }

建议将filename零件以及与该图像关联的其他元数据保存到核心数据中,并在每次需要时从文件系统中检索。

编辑:还请注意,从ios8开始,由于动态生成沙盒化的app-
id,因此保留完整文件url无效。您将需要documentsDirectory根据需要动态获取。

coredata swift 简单入门

coredata swift 简单入门

http://www.zoejblog.com/ioscoredata-swift-jian-dan-ru-men/

CoreData 入门使用 增删改查 swift

CoreData 入门使用 增删改查 swift

  1. 首先新建一个

  2. 点击新建的testInfo.xcdatamodeld 会出现这么个界面

  3. 创建完testInfo.xcdatamodeld之后 AppDelegate 会自动帮你添加支持coredata的代码 有兴趣的自己研究

  4. 首先 使用coredata 存储数据 1.创建表 2.创建字段 3.创建对应字段的模型类 就足够了

  5. 创建表 点击 然后出现  

  6. 添加字段 ....................

  7. 创建对应字段的模型  command+n 

  8. 都勾上之后会自动帮你创建一个类 

  9. 好 一切准备完毕.  找个地方测试一下  增删改查  就直接在 AppDelegate里写测试代码



好 以上就是简单的coredata使用  献给第一次用的新手.  本实例只试用于入门上手使用  


CoreData 数据库迁移升级笔记--swift

CoreData 数据库迁移升级笔记--swift

第一步:添加新的Mode Vision 

操作步骤:选择xxxx.xcdatamodeld文件,点击Editor--> add model vision,创建新的xxxx.xcdatamodeld,在新的xxxx.xcdatamodeld文件中添加你要添加字段。

第二步:选择当前xxxx.xcdatamodeld 

操作步骤:在属性栏找到model vision 选择新的xxxx.xcdatamodeld


第三步:appDelegate.swift中修改配置如下


  原来配置:   
     
     
        if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error) == nil {
      
     
      coordinator = nil
            
            var dict = [String: AnyObject]()
            dict[NSLocalizedDescriptionKey] = "Failed to initialize the application''s saved data"
            dict[NSLocalizedFailureReasonErrorKey] = failureReason
            dict[NSUnderlyingErrorKey] = error
            error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
            // Replace this with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            NSLog("Unresolved error \(error), \(error!.userInfo)")
            abort()
        }
        
        
   修改配置:     
        
        
      if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error) == nil {
      
            // Report any error we got.
            

            
            
            //
            
            var sqlPathRoot:NSString = url.absoluteString!
            
            var shmurl:NSURL = NSURL(string: sqlPathRoot.stringByAppendingString("-shm"))!
             var walurl:NSURL = NSURL(string: sqlPathRoot.stringByAppendingString("-wal"))!
            
               NSFileManager.defaultManager().removeItemAtURL(url, error: nil)
                NSFileManager.defaultManager().removeItemAtURL(shmurl, error: nil)
              NSFileManager.defaultManager().removeItemAtURL(walurl, error: nil)
            
            
            //在创建一次
            
            var persistentStore = coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error)
            
            
            if persistentStore == nil
            {
                print("版本更替失败了")

            }
            else
            {
             print("版本更替成功")
            
            }
              
        }




CoreData 未与 SwiftUI 中的列表视图同步

CoreData 未与 SwiftUI 中的列表视图同步

如何解决CoreData 未与 SwiftUI 中的列表视图同步?

我正在努力学习如何使用 Core Data 并使用 @State 让它强制同步视图。基本上我正在尝试创建一个简单的应用程序来了解它是如何协同工作的。我可以将一个新项目添加到 Core Data 中,但不知何故视图没有实时更新项目列表,我必须停止预览,然后重新构建我的新项目以显示在列表中。>

有人可以看看我的代码看看有什么问题吗?

我已将代码分成 4 个文件:

import Foundation
import CoreData
import UIKit

class CoreDataStorage {
    
    lazy var persistentContainer: NSPersistentContainer = {
            let container = NSPersistentContainer(name: "StoriesFromFallacya")
            container.loadPersistentStores { description,error in
                if let error = error {
                    fatalError("Unable to load persistent stores: \(error)")
                }
            }
            return container
        }()
    
    var context: NSManagedobjectContext {
      return  persistentContainer.viewContext
    }
    
    func fetchTaskList() -> [Dump] {
        
        let dumpList: [Dump]
        let fetchRequest: NSFetchRequest<CDDump> = CDDump.fetchRequest()
        if let rawDumPlist = try? context.fetch(fetchRequest){
            dumpList = rawDumPlist.compactMap({(rawDump:CDDump) -> Dump? in
                Dump(fromCoreDataObject: rawDump)
            })
        }else {
            dumpList = []
        }
        return dumpList
    }
    
    
    func addNewDump(dump: Dump){
        let newDump = CDDump(context: context)
        newDump.id = dump.id
        newDump.name = dump.name
        saveData()
    }
    
  
    
     func fetchCDDump(withId dumpId: UUID) -> CDDump?{
        let fetchRequest: NSFetchRequest<CDDump> = CDDump.fetchRequest()
        fetchRequest.predicate = nspredicate(format: "id == %@",dumpId as CVararg)
        fetchRequest.fetchLimit = 1
        let fetchResult = try? context.fetch(fetchRequest)
        return fetchResult?.first
    }
    
    
    private func saveData(){
        if context.hasChanges {
            do {
                try context.save()
                
            }catch {
                print("Erreur pendant la sauvegarde CoreData: \(error)")
            }
        }
    }
    
    
    
    func deleteDump(dumpID:UUID){
        if let dumpFound = fetchCDDump(withId: dumpID){
            self.context.delete(dumpFound)
            saveData()
        }else {
            print("Pas trouvé")
        }
    }
}

extension Dump {
    init?(fromCoreDataObject coreDataObject: CDDump){
        guard let id = coreDataObject.id,let name = coreDataObject.name else {
            return nil
        }
        self.id = id
        self.name = name
     
    }
}
  1. 转储管理器
import Foundation
import SwiftUI

class DumpManager: ObservableObject {
    
    let storage: CoreDataStorage = CoreDataStorage()
    
   @Published var dumpList: [Dump] 
    
    init(){
        dumpList = storage.fetchTaskList()
    }

    @discardableResult
     func addDump(dumpName: String) -> Dump {
        let newDump = Dump(name: dumpName)
        dumpList.append(newDump)
        storage.addNewDump(dump: newDump)
        return newDump
    }
    
     func deleteDump(withID dumpID:UUID) {
        if let indexDump = dumpList.firstIndex(where: {
            (dump) -> Bool in
            dump.id == dumpID
        }) {
            dumpList.remove(at: indexDump)
            storage.deleteDump(dumpID: dumpID)
        }
    }
  
}
  1. BrainDumpView
import SwiftUI
import CoreData

struct BrainDumpView: View {

   
//    @Observedobject var dumpManager: DumpManager = DumpManager()
    @State var theFuckingList = DumpManager().dumpList
    @State var taskManager = DumpManager()
   
 
    
    @State private var showingAddDumpView: Bool = false
//    @State var newDumpName: String
    
    var body: some View {
        NavigationView {
            vstack {
                vstack(alignment: HorizontalAlignment.leading){
                List{
                    ForEach(taskManager.dumpList) { dump in
                    Text(dump.name)
                }
                .onDelete(perform: deleteDump)
                .onTapGesture {
                    updateDump()
                }
            }
                Spacer()
        }
            }
            .navigationBarTitle(Text("Brain Dumps"))
            .navigationBarItems(trailing:
              Button(action:
                showingAddDump
            ) {
                Image(systemName: "plus")
                    .font(.largeTitle)
            }
            )
            }
       
        .sheet(isPresented: $showingAddDumpView,content: {
            NewDumpView(newDumpName: "",dumpList: $taskManager.dumpList)

                            })
       
    }
    func showingAddDump() {
        showingAddDumpView.toggle()
    }
//    func createNewDump() {
//        if newDumpName.count > 0 {
//            dumpManager.addDump(dumpName: newDumpName)
//        }
//        newDumpName = ""
//    }
    
    func deleteDump(offsets: IndexSet){
        taskManager.deleteDump(withID: taskManager.dumpList[offsets[offsets.startIndex]].id)
        }
    }

func updateDump(){
    
}

struct BrainDumpView_Previews: PreviewProvider {
 
    
    static var previews: some View {
        
      
        BrainDumpView()
    }
}
  1. 新建转储视图
import SwiftUI

struct NewDumpView: View {
    
  
    @Environment(\.presentationMode) var presentationMode
    @Observedobject var dumpManager: DumpManager = DumpManager()
    @State var taskManager = DumpManager()
    @State var newDumpName: String
    @Binding var dumpList: [Dump]
  
    var body: some View {
        NavigationView {
            vstack{
                Spacer()
                TextField("Dump",text: $newDumpName,onCommit: createNewDump)
                    
                    .padding()
                    .background(Color(UIColor.tertiarySystemFill))
                    .cornerRadius(9)
                    .font(.system(size: 24,weight: .bold,design: .default))
                    .navigationBarTitle("New Dump",displayMode: .inline)
                    .navigationBarItems(trailing:
                      Button(action: {
                        self.presentationMode.wrappedValue.dismiss()
                    }) {
                        Image(systemName: "xmark")
                    }
                    )
           
                Button(action: {
                               self.presentationMode.wrappedValue.dismiss()
                    createNewDump()
                             }) {
                               Text("Save")
                             }
            }
            
        }
        .padding()
                .navigationViewStyle(StackNavigationViewStyle())
                                    }
    
    func createNewDump() {
        if newDumpName.count > 0 {
            
            taskManager.addDump(dumpName: newDumpName)
        }
        newDumpName = ""
        self.presentationMode.wrappedValue.dismiss()
    }
                                    
}

非常感谢,我已经为此苦苦挣扎了好几天了:/

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

关于将图像存储到CoreData-Swift图像如何存储的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于coredata swift 简单入门、CoreData 入门使用 增删改查 swift、CoreData 数据库迁移升级笔记--swift、CoreData 未与 SwiftUI 中的列表视图同步的相关信息,请在本站寻找。

本文标签: