Ответ 1
OS X Desktop Picture Глобальное обновление через пробелы
В desktoppicture.db
запрос update
может быть запущен в таблице data
с указанием пути к новому изображению (value
). Не требуется delete
, а затем insert
значения или использовать циклы. Используя обновление запросов без запроса, и, таким образом, он обновит каждую строку в таблице data
.
(В приведенном ниже примере используется языковой уровень SQLite.swift, который использует безопасный по типу интерфейс Swift)к югу >
func globalDesktopPicture(image: String) {
let paths: [String] = NSSearchPathForDirectoriesInDomains(.ApplicationSupportDirectory,
.UserDomainMask, true)
let appSup: String = paths.first!
let dbPath: String = (appSup as NSString).stringByAppendingPathComponent("Dock/desktoppicture.db")
let dbase = try? Connection("\(dbPath)")
let value = Expression<String?>("value")
let table = Table("data")
try! dbase!.run(table.update(value <- image))
system("/usr/bin/killall Dock")
}
Такая же концепция/принцип обновления db применяется одинаково, если вы вместо этого решили использовать традиционный/устаревший (мосты) метод выполнения запросов SQLite3:
func legacyGlobalDesktopPicture(image: String) {
let paths: [String] = NSSearchPathForDirectoriesInDomains(.ApplicationSupportDirectory,
.UserDomainMask, true)
let appSup: String = paths.first!
let dbPath: String = (appSup as NSString).stringByAppendingPathComponent("Dock/desktoppicture.db")
var db: COpaquePointer = nil
if sqlite3_open(dbPath, &db) == SQLITE_OK {
if sqlite3_exec(db, "UPDATE DATA SET VALUE = ('\(image)');", nil, nil, nil) != SQLITE_OK {
let errmsg = String.fromCString(sqlite3_errmsg(db))
print("error inserting table row: \(errmsg)")
}
system("/usr/bin/killall Dock")
}
sqlite3_close(db)
}
ПРИМЕЧАНИЕ. Приведенные выше примеры весьма минимальны и должны включать некоторые проверки ошибок и т.д.
Дополнительная информация: