问题标签 [uimanageddocument]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - managedObjectContext 是否在创建/打开托管文档之前初始化
我正在使用 UIManagedDocument 访问核心数据,我想知道的是,一旦我实例化了 managedDocument(在创建或打开之前),似乎 managedObjectContext 已经设置/初始化以供将来使用。我问的原因是我想在启动时将 managedObjectContext 传递给控制器,然后在创建或打开 managedDocument/数据库以供使用时在那里等待。
ios - CoreData 保存问题
我的整个应用程序(包含两个实体)中有一个托管文档,用户可以从两个不同的视图控制器更新它。每个视图控制器都有自己的 NSFetchedResultsController 属性来传递更改:一个视图控制器中的 UICollectionView 和另一个中的 UITableView。根视图控制器中的 UICollectionView 显示团队,而 segued 视图控制器中的 UITableView 显示该团队中的玩家。
当我在第一个视图控制器中时,我可以添加一个团队的实例,它可以正常工作,因为它将它们保存到文档中,然后将它们添加到 UICollectionView。当我在第二个视图控制器中时,我将 Player 插入 CoreData 并调用:
这会正确调用 NSFetchedResultsControllerDelegate 方法:-(void)controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
在这个委托方法中,我调用:
但是,在表视图上调用此行插入方法会导致以下 Core Data 错误:
“CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获了异常。这通常是 NSManagedObjectContextObjectsDidChangeNotification 观察者中的一个错误。 * -[__NSPlaceholderArray initWithObjects:count:]:尝试从对象 [0] 插入 nil 对象用户信息(空)"
我的 fetchedResultsController 肯定是 NSManagedObjectContextObjectsDidChangeNotification 的观察者,但是这个错误发生在托管对象上下文的任何更改之前。所以我基本上无法确定托管对象上下文在哪一点得到 null userInfo。
(发生的另一件事是我的 NSFetchedResultsController 来自具有 UICollectionView 的根视图控制器,在下一个具有 UITableView 的视图控制器中的 NSFetchedResultsController 触发它自己之前触发其委托方法。我认为这是正确的功能,因为 Team 和 Player 都在 CoreData 中获得更新)。
关于 UITableView 行插入为何导致此错误的任何想法,或者我的单个托管文档如何可能存在可能导致此错误的不一致?
ios - 创建 UIManagedDocument 时出现 EXC_BAD_ACCESS
我正在创建 UIManagedDocument,但我不知道为什么会收到错误消息:
我的代码中唯一的事情就是创建 this UIManagedDocument
。这个函数在viewDidLoad:
我试图通过 NSLog 打印类[[UIManagedDocument alloc] initWithFileURL:url]
以查看它是否属于对象类型UIManagedDocument
,但是 EXC_BAD_ACCESS 再次出现在 NSLog 代码行中。
我不知道以下细节是否与问题有关:我使用 Xcode 4.3.3 和 iOS 5.1 模拟器。我尝试使用 iOS 5.0 Simulator 运行它,但出现了同样的错误。我的 Mac OS X 版本是 10.7.4。
为什么你认为我会收到这个错误?
ios - 使用 UIManagedDocument 的 iPhone Simulator 5.1 和 Xcode 4.5 中的错误
我有一个非常奇怪的问题,过去两天我一直在试图解决......我有一段代码在 Xcode 4.4 和 iOS 5.1 模拟器上运行良好,使用 5.1 SDK。在我更新到 Xcode 4.5 和 6.0 SDK 后,我的代码在 iOS 5.1 模拟器中停止工作......即使它在 iOS 6.0 模拟器中运行得非常好。有什么我不知道的变化吗?
这是代码:
由于某种原因,saveToURL 和 openWithCompletionHandler 永远不会在 5.1 模拟器中返回。有谁知道为什么?
iphone - 告诉 ViewController UIManagedDocument 准备好使用了吗?
我正在UIManagedDocument
我的 AppDelegate 中创建或打开一个,使用完成处理程序块在文档准备好使用时通知我。
我的问题是我想NSFetchedResultsController
在我的 ViewController 上设置一个,但目前控制器视图在创建或打开文档(来自 AppDelegate)之前加载。我只是好奇我如何通知控制器文档已打开并可以使用。我的猜测是我会使用 a NSNotification
,但我只是想检查一下我不会以错误的方式处理这个问题。
ios-simulator - UIManagedDocument CompletionHandler 未在 iOS 5.1 模拟器中执行,但适用于设备和 iOS 6.0 模拟器
我希望有人对此有一些想法......
我有一个使用 UIManagedDocument 的项目。我在 appDelegate 中做的第一件事是打开文档。一切都很顺利,直到突然(代码中没有任何更改) -openWithCompletionHandler: 停止执行处理程序代码。该应用程序在设备上运行良好,但在模拟器中却不行。作为一个云雀,我尝试在 iOS 5.0 和 6.0 模拟器下运行该应用程序,一切都按预期运行!?!
我重新安装了 xcode 4.5 并且行为保持不变。我通过删除应用程序文件夹中的 xcode 应用程序来卸载。我还删除了 ~/Library/Application Support/iPhone Simulator/ 目录中的所有 iPhone 模拟器文件。
有人有什么想法吗?
ios - 使用 +[NSThread sleep:] 解决死锁问题
我刚刚“解决”了似乎是死锁或同步问题:
在将 MPMediaItem(音乐/图像)属性引用从 IPOD 库附加到对象实例的应用程序中,这些对象通过 CoreData 回存。我在这里的兴趣是准确了解正在发生的事情以及在这种情况下的最佳实践是什么。开始:
每次复制的配方如下:
用户创建一个新项目。
/li>稍后 managedObjectContext 用于关联对象实例并水合 CoreData 模型
/li>用户稍后创建“CustomAction”对象,将“ChElement”添加到它并将“MusicElement”与 ChElement 相关联。(这些是 CoreData 模型对象的化名)。MusicElement 是通过IPOD 库添加的。
/li>用户保存该项目,然后切换到已经创建了一个 CustomAction 对象的现有项目,其中包含一个 ChElement 和一个 MusicElement。
用户从 tableView 中选择 ChElement 并导航到 detailView。当离开 ChElementTVC(CoreData TableViewController 类的子类,类似于 Apple 文档中的类)时,这是必需的:
/li>在详细视图中,用户更改 ChElement 对象的属性并保存项目。detailView 调用其委托 (ChElementTVC) 进行保存。保存到保存 NSManagedObject 的 UIManagedDocument 实例。
/li>由于委托 (ChElementTVC) 将 detailView 从导航堆栈中弹出,它的 viewWillAppear 被调用,并且 fetchedResultsController.delegate 被恢复。
/li>
没有[NSThread sleepForTimeInterval:0.1];
应用程序挂起。当我通过 Xcode 发送 SIGINT 时,我得到调试器并显示以下内容:
(lldb) BT
(lldb) 帧选择 5
(lldb) 反汇编 -f
另一种解决方法是可能的。将 fetchedResultsController.delegate 恢复编码-[ChElementTVC viewDidAppear:]
也有效地延迟了主队列上的这个设置。
另一个解决方法是在项目保存完成后在完成块中执行 nav pop:
我认为保存操作与主队列上的委托恢复同时在后台运行,但我不知道如何检查/证明/反驳该理论。
那么,有了这个,有人可以解释发生了什么以及在这种情况下的最佳做法是什么?此外,感谢学习参考。
ios - iCloud NSPersistentStoreDidImportUbiquitousContentChangesNotification 仅在应用启动后立即调用
我的应用程序使用包含在 UIManagedDocument 中的核心数据数据库。当我尝试通过 iCloud 同步时,数据很少被刷新。我通过将以下 app 参数添加到我的方案中来打开普遍存在的日志。
参数日志输出显示目标设备在源设备上进行更改后很快就会识别出更改,但NSPersistentStoreDidImportUbiquitousContentChangesNotification
不会触发通知。有时,通知会在看到更新后的很长一段时间内触发,但通常不会。
但是,当我重新启动应用程序时(在日志打印一些有关更改的文本后的任何时间), NSPersistentStoreDidImportUbiquitousContentChangesNotification
通知会立即触发,导致数据刷新。
注意:我已订阅通知。
objective-c - 可以创建但不能打开具有 iCloud 支持的 UIManagedDocument
我正在创建一个具有 iCloud 支持的新 UIManagedDocument,如下所示:
- 使用本地沙盒 URL 分配和初始化
- 设置持久存储选项以支持 iCloud:ubiquitousContentNameKey 和 ubiquitousContentURL。我唯一生成的名称和 URL 指向我的 ubiquityContainer / CoreData。
- 使用 UIManagedDocument 的 saveToURL 方法在本地保存到沙箱。
- 在完成处理程序中,使用 FileManager 的 setUbiquitous 方法移动到 iCloud。
到目前为止,这种舞蹈有效。(嗯,有点)。在我调用 setUbiquitous 后,我收到一个错误,说它不成功,但是文档移动到了云端。完成后,我在云中有一个新文档。这似乎是一个错误,因为我已经能够用其他人的代码复制它。
我实际上是在“文档视图控制器”中生成此文档,其中列出了云中的所有文档。因此,当这个新文档的最终完成处理程序完成时,由于 NSMetadataQuery,它会显示在表格视图中。到目前为止,我认为非常标准的用法。
要编辑文档,用户点击并转到“单视图文档视图控制器”。
在这个视图控制器中,我需要“重新打开”选定的文档,以便用户可以编辑它。
所以我再次经历了一系列步骤:
- 使用 fileURL 分配 / 初始化 UIManagedDocument —— 这次,URL 来自云端。
- 使用相同的设置设置我的持久存储选项,与上面的步骤 2 相同。
现在,我尝试了第 3 步,即从磁盘打开文档,但它失败了。文档处于“Closed | SavingError”状态并且尝试打开失败。
有谁知道为什么我的文档会创建 OK,移动到云 OK,但是在随后的立即尝试中无法打开?(实际上,在该应用程序的启动中进行了一次尝试 - 见下文)。具体来说,什么会使 UIManagedDocument 实例被创建但处于关闭、不可打开的状态?
有趣的是,如果我退出应用程序并再次启动,我可以点击并重新加载文档并进行编辑。
偶尔我可以很简单地创建、打开和编辑,比如插入一个托管对象,然后它进入关闭状态 | 保存错误状态。
错误信息:
我将 UIManagedDocument 子类化并覆盖了 -handleError: 方法以尝试获取更多信息,这就是我得到的(以及我放入的其他一些调试日志):
2012-10-05 14:57:06.000 基础 [23687:907] 单个文档视图控制器视图已加载。文档:fileURL:file://localhost/private/var/mobile/Library/Mobile%20Documents/7PB5426XF4~com~howlin~MyApp/Documents/New%20Document%2034/documentState:[关闭]
2012-10-05 14:57:06.052 MyApp[23687:907] 文档状态已更改。当前状态:5 文件URL:file://localhost/private/var/mobile/Library/Mobile%20Documents/7PB5426XF4~com~howlin~MyApp/Documents/New%20Document%2034/ documentState:[关闭 | 保存错误]
2012-10-05 14:57:06.057 Foundations [23687:5303] UIManagedDocument 错误:商店名称:新文档 34 已在使用中。存储 URL:file://localhost/private/var/mobile/Library/Mobile%20Documents/7PB5426XF4~com~howlin~MyApp/Documents/New%20Document%2034/StoreContent.nosync/persistentStore 正在使用存储 URL:file:/ /localhost/var/mobile/Applications/D423F5FF-4B8E-4C3E-B908-11824D70FD34/Documents/New%20Document%2034/StoreContent.nosync/persistentStore
2012-10-05 14:57:06.059 MyApp[23687:5303] { NSLocalizedDescription = "商店名称:新文档 34 已在使用中。\n\t商店 URL:file://localhost/private/var/mobile/ Library/Mobile%20Documents/7PB5426XF4~com~howlin~MyApp/Documents/New%20Document%2034/StoreContent.nosync/persistentStore\n\t 使用商店 URL:file://localhost/var/mobile/Applications/D423F5FF-4B8E -4C3E-B908-11824D70FD34/Documents/New%20Document%2034/StoreContent.nosync/persistentStore\n"; NSPersistentStoreUbiquitousContentNameKey = "新文档 34"; }
该错误似乎认为我正在创建一个在随后打开时已经存在的商店。我现在应该在第二次打开时在持久存储上设置这些 iCloud 选项吗?我已经尝试过这种方法,但它也没有奏效。
我研究了关于 UIManagedDocument 的斯坦福讲座,但看不出我做错了什么。
这是我创建文档并迁移到云的方法:
这是我在persistentStore上为iCloud设置选项的地方:
这是我尝试重新打开它的地方:
ios - UiManagedDocument 在模拟器中运行良好,但在 iPhone 上出现 UIDocumentStateSavingError
我在这里建议使用 uiManagedDocument 单例:http: //adevelopingstory.com/blog/2012/03/core-data-with-a-single-shared-uimanageddocument.html
该文档由 fetchedResultsController 访问并显示在 tableViewController 中。
}
//在tableViewController中
该应用程序在 6.0 模拟器上运行良好,但在设备上,表格是空白的,并且文档显示一个问题,即 UIDocumentStateSavingError 或 UIDocumentStateEditingDisabled。我不知道是什么导致它在手机和模拟器上的运行方式不同