swift5中sqlite db中的url图片存储

hwazgwia  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(204)

我有一个swift项目,它使用一组图片。图片数组保存在filmanager.default.url路径中的存储器中。然后,url保存在sqlite数据库中。我可以毫无问题地添加到数组中,但是,每当我试图从内存中调用它时,就会遇到问题。我不知道是保存错误还是加载错误。我会把我的密码贴在这里。

func save(images: Array<UIImage>, identifier: String) -> Array<String> {
        var picCounter = 0
        var URLs: Array<String> = []
        for pic in images {
            let id = identifier + "makeSureThisCantAccidentallyBeAnID" + String(picCounter)
            let jpgImageData = pic.jpegData(compressionQuality: 0.5)
            let documentURL = fileManager.urls(for: .documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask).first
            let path = documentURL!.appendingPathComponent(id + ".png")
            do {
                try jpgImageData!.write(to: path)
            } catch {
                print(error)
            }
            picCounter += 1
            URLs.append(path.absoluteString)
        }
        return URLs
    }

这就是我的保存功能。它应该存储url并以字符串格式返回url数组。这是我的加载函数,它应该获取一个url数组并返回图像数组。

func recover(URLarray: Array<String>, identifier: String) -> Array<UIImage> {
        if URLarray[0] == "fake url" {
            let pic = #imageLiteral(resourceName: "LaunchScreen")
            let fakeArray = [pic]
            return fakeArray
        }
        var picCounter = 0
        var imageArray: Array<UIImage> = []
        for url in URLarray {
            //let fileData = FileManager.default.contents(atPath: url)
            guard let image = UIImage(contentsOfFile: url) else { return imageArray }
            picCounter += 1
            imageArray.append(image)
        }
        return imageArray
    }

“#imageliteral”是一个文字图像,如果没有要加载的数组,则使用它来代替数组。从理论上讲,这应该可以在不返回nil的情况下调用每个图像。最后,我将发布我的sqlite保存函数

func saveNote(note: Note) {
        connect()

        var statement: OpaquePointer? = nil
        if sqlite3_prepare_v2(
            database,
            "UPDATE remember SET person = ?, memories = ?, imageurl = ? WHERE rowid = ?",
            -1,
            &statement,
            nil
        ) == SQLITE_OK {
            sqlite3_bind_text(statement, 1, NSString(string: note.person).utf8String, -1, nil)
            sqlite3_bind_text(statement, 2, NSString(string: note.memories).utf8String, -1, nil)
            var imageURL: String = ""
            for url in note.imageURLs {
                imageURL.append(url)
                imageURL.append("@")
            }
            sqlite3_bind_text(statement, 3, NSString(string: imageURL).utf8String, -1, nil)
            sqlite3_bind_int(statement, 4, note.id)
            if sqlite3_step(statement) != SQLITE_DONE {
                print("Error saving note")
            }
        }
        else {
            print("Error creating note update statement")
        }

        sqlite3_finalize(statement)
    }

我就是这样想救的。我不得不将一个url数组存储为一个字符串,因此我决定将其设置为一个可以用“@”字符拆分的字符串。如果您认为这是问题所在,请告诉我可以使用什么字符或方法来执行此操作,因为我已尝试更改字符。如果有人能帮我这么多,我非常感激!谢谢您!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题