关于将图像存储到CoreData-Swift和图像如何存储的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于coredataswift简单入门、CoreData入门使用增删改查swift、C
关于将图像存储到CoreData-Swift和图像如何存储的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于coredata swift 简单入门、CoreData 入门使用 增删改查 swift、CoreData 数据库迁移升级笔记--swift、CoreData 未与 SwiftUI 中的列表视图同步等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 将图像存储到CoreData-Swift(图像如何存储)
- coredata swift 简单入门
- CoreData 入门使用 增删改查 swift
- CoreData 数据库迁移升级笔记--swift
- CoreData 未与 SwiftUI 中的列表视图同步
将图像存储到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 简单入门
http://www.zoejblog.com/ioscoredata-swift-jian-dan-ru-men/CoreData 入门使用 增删改查 swift
首先新建一个
点击新建的testInfo.xcdatamodeld 会出现这么个界面
创建完testInfo.xcdatamodeld之后 AppDelegate 会自动帮你添加支持coredata的代码 有兴趣的自己研究
首先 使用coredata 存储数据 1.创建表 2.创建字段 3.创建对应字段的模型类 就足够了
创建表 点击
然后出现
添加字段 ....................
创建对应字段的模型 command+n
都勾上之后会自动帮你创建一个类
好 一切准备完毕. 找个地方测试一下 增删改查 就直接在 AppDelegate里写测试代码
好 以上就是简单的coredata使用 献给第一次用的新手. 本实例只试用于入门上手使用
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 中的列表视图同步?
我正在努力学习如何使用 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
}
}
- 转储管理器
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)
}
}
}
- 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()
}
}
- 新建转储视图
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 中的列表视图同步的相关信息,请在本站寻找。
本文标签: