我还有一个新手问题。希望你们中的一位编程大师可以帮助我。
我正在尝试从 CloudKit 获取多段文本(例如新闻文章)。我不知道如何设置文本格式以使其包含换行符。有人告诉我应该在 CloudKit 记录上使用 CKAsset 而不是 String,但我不明白它应该如何格式化。
谁能帮助我更多地理解这一点?
提前致谢。
我们创建了一个 iOS 应用程序,它保存到 CoreData,然后同步到 CloudKit。在测试中,我们尚未找到从应用程序 iCloud 容器中清除数据的方法(对于用户私有数据)。只能从我们知道的那里删除。如果我们遇到同步问题并且某些内容“卡在 iCloud 中”,我们不知道如何清除以干净地重新启动。关于如何彻底清理 iCloud 的任何想法。
更新信息:CloudKit 私有数据库。没有区域。清除应用程序的所有数据,以全新开始。应用程序的用户将拥有此控制权。预期结果:从应用程序中,用户可以快速删除他们保存的所有用户数据。我可能没有问正确的问题或遗漏了一些东西 - 感谢任何指导。
让我们考虑这个示例用例,一个用于食谱的 iOS 应用程序:
公共数据(由所有用户共享,只读,按需下载):当用户第一次打开应用程序时,他会发现一个浅列表(未完全下载)10个菜谱(从远程服务器获取),可以选择下载完整菜谱和然后他可以打开菜谱的详细信息屏幕。在任何时候,列表都可以增长,用户应该始终拥有最新的数据(从远程获取并保持同步)。这些数据应该可以离线使用,并且应该在在线时提取新内容。(只读)
私有数据(特定于用户):用户可以创建本地存储并远程同步的自定义配方。该数据应该可以离线使用,并且应该在在线时同步(读取和写入)
数据应在所有 iOS 设备中同步
我正在考虑使用 Core Data(离线)和 CloudKit(远程)。但我不确定这是否可以处理上述场景或者是否有任何限制。您认为 Core Data(离线)和 CloudKit 是最佳选择吗?有什么限制吗?你还有什么推荐的选择
在我的 CoreData 模型中,我创建了一个抽象实体 ( IDManagedObject) 来共享其他实体的公共属性。
当我第一次运行它时,我遇到了几个Cannot merge multiple root entity source tables into one destination entity root table错误。
完整错误如下:
Fatal error: Unresolved error Error Domain=NSCocoaErrorDomain Code=134110 "An error occurred during persistent store migration." UserInfo={sourceURL=file:///Users/koen/Library/Developer/CoreSimulator/Devices/8E2C0F01-ABF3-4414-A01A-EE4FFEF8D187/data/Containers/Data/Application/B7A9A4EE-EB57-434F-B1A9-576DCD80CFBD/Library/Application%20Support/MyApp.sqlite, reason=Cannot migrate store in-place: Cannot merge multiple root entity source tables into one destination entity root table, destinationURL=file:///Users/koen/Library/Developer/CoreSimulator/Devices/8E2C0F01-ABF3-4414-A01A-EE4FFEF8D187/data/Containers/Data/Application/B7A9A4EE-EB57-434F-B1A9-576DCD80CFBD/Library/Application%20Support/MyApp.sqlite, NSUnderlyingError=0x6000019fb810 {Error Domain=NSCocoaErrorDomain Code=134110 "An error occurred during persistent store migration." UserInfo={message=Cannot merge multiple root entity source tables into one destination entity root table, …Run Code Online (Sandbox Code Playgroud) 我正在努力在我的项目中实现 CoreData/Cloudkit。它是使用 MVVM 架构在 SwiftUI 中构建的。我陷入了在 Apple 提供的 Xcode 模板中向 CoreData 保存/添加某些内容的部分,这是在 ContentView 文件中完成的,但是对我来说,这感觉像是应该在 ViewModel 中完成的事情。那是对的吗?
对于其他上下文,我的项目是一个简单的游戏,分数是在 viewModel 中计算的。然后分数立即通过 ContentView 显示给用户。我还希望能够将分数保存到 Leaderboard CoreData 对象中。由于大部分与分数相关的工作都是在 viewModel 中完成的,因此对我来说,在其中而不是在视图中处理保存是最有意义的。
模板通过以下代码进行保存
let newItem = Item(context: viewContext)
newItem.timestamp = Date()
do {
try viewContext.save()
Run Code Online (Sandbox Code Playgroud)
哪里viewContext@Environment(\.managedObjectContext) private var viewContext
我将如何在 ViewModel 中执行此操作,因为我相信@Enviroment这是针对 SwiftUI 的。
进入Mac App Store是访问iCloud的要求。
同样适用于访问CloudKit吗?
该方案是让Mac OSX应用程序通过CloudKit与iOS对方共享数据。
根据本文-http://9to5mac.com/2014/06/05/icloud-drive-enables-non-mac-app-store-apps-to-use-icloud-document-storage/-您不会但我正在寻求任何实际设法做到的开发者的确认。
我正在制作一个录制视频的应用程序,使用带有 CKAsset 的 CloudKit 将其上传到 iCloud,然后下载文件并在 AVPlayer 中播放。这都是用 Swift 2.0 编写的
我已经下载了数据,我想我已经能够参考它,但我不确定。当我将 URL 转换为 NSData 对象并将其打印到控制台时,数据/垃圾确实会打印。然而,视频文件作为二进制文件下载。我能够转到 CloudKit 仪表板并下载文件并将“.mov”附加到它,并且它在 Quicktime 中打开没问题。
所以我认为我的主要问题是我无法弄清楚如何让视频文件实际播放,因为该文件没有扩展名。我曾尝试使用 URLByAppendingPathExtension() 将 '.mov' 附加到末尾,但无济于事。让我知道任何想法!
上传视频
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
let tempURL = info[UIImagePickerControllerMediaURL] as! NSURL
dismissViewControllerAnimated(true) { () -> Void in
self.uploadVideoToiCloud(tempURL)
print("\n Before Upload: \(tempURL)\n")
}
}
func uploadVideoToiCloud(url: NSURL) {
let videoRecord = CKRecord(recordType: "video", recordID: id)
videoRecord["title"] = "This is the title"
let videoAsset = CKAsset(fileURL: url)
videoRecord["video"] = videoAsset
CKContainer.defaultContainer().privateCloudDatabase.saveRecord(videoRecord) …Run Code Online (Sandbox Code Playgroud) 我正在创建一个应用程序,需要在应用程序退出时将计数器变量(这是一个整数)保存到云中,然后在应用程序变为活动状态时加载计数器。我以前从未使用过 CloudKit,有人可以简化我如何使用 swift 做到这一点吗?我尝试复制的许多示例对于我想要实现的目标来说都过于复杂。
注意:在有人提到它之前,我知道还有其他方法可以实现此目的,但我想使用 CloudKit 来实现。
另外,我已经了解 appDelegate 转换是如何工作的,所以我不需要帮助:)
是否有更好的解决方案(以下可能的解决方法)为iCloud/CloudKit用户获取UUID?
因此,可以检测用户是否已使用相同的iCloud帐户执行某项操作(在其他设备上).
可能的解决方法:
随着最新测试版中的 Swift 更新,这不再有效,我很难过。我可能需要添加其他的东西,我试图改变let到var并加入!到recordType["username"]和password。我是新手,所以任何方向都将不胜感激!
import UIKit
import CloudKit
class LoginViewController: UIViewController {
@IBOutlet weak var username: UITextField!
@IBOutlet weak var password: UITextField!
let publicDatabase = CKContainer.default().publicCloudDatabase
override func viewDidLoad(){
super.viewDidLoad()
}
@IBAction func LoginTapped(sender: AnyObject){
var recordType = CKRecord(recordType: "Login")
recordType["username"] = username.text <-Cannot assign value
recordType["password"] = password.text <-Cannot assign value
publicDatabase.save(recordType) {
(record, error) in
if error == nil {
print("Created Successfully")
}
else {
print(error?.localizedDescription)
}
}
} …Run Code Online (Sandbox Code Playgroud) 由于ZoneOptions已弃用,我将optionsByRecordZoneID变量更改ZoneConfiguration为如下
var optionsByRecordZoneID = [CKRecordZone.ID: CKFetchRecordZoneChangesOperation.ZoneConfiguration]()
for zoneID in zoneIDs {
let options = CKFetchRecordZoneChangesOperation.ZoneConfiguration()
options.previousServerChangeToken = settings.getChangeToken(forKey: databaseTokenKey)
optionsByRecordZoneID[zoneID] = options
}
Run Code Online (Sandbox Code Playgroud)
现在,对于这行optionsByRecordZoneID变量,我收到以下错误,
let fetchRecordZoneChangesOperation = CKFetchRecordZoneChangesOperation(recordZoneIDs: zoneIDs, optionsByRecordZoneID: optionsByRecordZoneID)
Run Code Online (Sandbox Code Playgroud)
无法将类型“[CKRecordZone.ID:CKFetchRecordZoneChangesOperation.ZoneConfiguration]”的值转换为预期的参数类型“[CKRecordZone.ID:CKFetchRecordZoneChangesOperation.ZoneOptions]?”
任何有关摆脱它的帮助将不胜感激。
我有一组记录名称(或字符串)。我想获取公共数据库中具有任何这些记录名称的任何记录。我该怎么做?