问题标签 [uidocument]
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.
icloud - 当 URL 报告 NSURLUbiquitousItemHasUnresolvedConflictsKey 为 true 但没有其他版本的 URL 时,这意味着什么?
为了测试冲突,我一直在两台设备上保存同一文档的两个不同版本。然后,在这两种设备上,我将能够查看currentVersionOfItemAtURL
以查看“获胜”版本(在两种设备上都是相同的)以及otherVersionsOfItemAtURL
orremoveOtherVersionsOfItemAtURL
以查看其他设备。
但是我现在似乎有一个处于奇怪状态的文档,currentVersionOfItemAtURL
两个设备上的位置不同,并且没有otherVersionsOfItemAtURL
or removeOtherVersionsOfItemAtURL
。使用getResourceValue:forKey:
withNSURLUbiquitousItemHasUnresolvedConflictsKey
报告 URL 存在未解决的冲突,但我无法看到它们。
当 URL 报告 NSURLUbiquitousItemHasUnresolvedConflictsKey 为 true 但没有其他版本的 URL 时,这意味着什么?这是我需要在生产应用程序中处理的情况吗?
ios - 如何减慢 UIDocument 的初始 loadFromContents:ofType:error:?
当我将文件包从 Finder 拖到 iTunes.app 文件共享窗格中时,我的 UIDocument 类正在尝试读取关联的文件包装器,并且看起来我读取它的代码执行速度比 iTunes.app 复制内容的速度快. 初始文件包装器数组仅包含包装器内的两个文件之一。
那么我如何“减慢”我的代码呢?
我使用 performSelector:withObject:AfterDelay:1.0f 进行了测试,效果很好,但感觉真的很冒险:如果将一个非常大的文件拖入 iTunes 怎么办(我的意思是一个非常大的文件超过了我的延迟)?如果同时放置多个文件怎么办?
我看着以某种方式辨别文件已准备好读取,但苹果的 NSFileManager 文档说
“尝试一项操作(例如加载文件或创建目录)、检查错误并优雅地处理这些错误要比尝试提前确定操作是否会成功要好得多。”
但是出现时间问题的地方是在解码组成文件包装器的过程中,所以如何“优雅地”处理它让我望而却步。
我的包文件中有两个数据文件(在这个早期阶段,但设计是因为会有更多):data.dat 和 info.dat。当我第一次让代码工作到可以将文件拖到 iTunes.app 并在我的视图控制器中注意到它的地步时,data.dat 总是可以正常解码,但找不到 info.dat。一旦文件位于我的本地文档文件夹中,视图控制器就会按预期显示所有数据(即 info.dat 位于文件包装器内并且格式正确)。怀疑这是一个时间问题,我将文件名常量和磁盘文件重命名为 zdata.dat 和 ainfo.dat —— 果然:加载了 ainfo.dat 并且我的 UIDocument 子类抱怨找不到 zdata.dat。
我使用延迟加载,但视图控制器对 info.dat 内容有直接的兴趣,因此延迟加载不足以让 iTunes 完成复制!
从我的 UIDocument 子类实现:
问题是在 decodeObjectFromWrapperWithPreferredFilename: 中发现的,当进行检查以确保存在预期的文件包装器时。通常情况下,如果文件损坏,或者应用程序的版本 2 使用了不同的文件格式,就会出现这种情况。但是优雅地处理这些情况属于“偏执的编程预期那种事情”的标题,而不是“稍等片刻,您的所有数据都将提供给您”的标题。
ios - UIDocument 打开/关闭行为
我有一个基于 UIDocument 的应用程序,没有 iCloud 支持。用户可以创建文档,并将它们保存到应用程序的 Document 目录。
我还创建了一些“示例”文档,并将它们与应用程序的捆绑包一起传递。我希望用户能够像打开自己的文档一样打开示例文档:
我看到的是这样的:
- 在 上
viewDidLoad
,docs 数组将填充示例文档,并在应用程序首次启动时显示在 tableView 中。这里没有问题,一切都很顺利和美好。 然后我使用以下代码退出视图以关闭所有打开的文档:
/li>当我再次打开视图时,应该再次填充文档数组并重新填充 tableView,但没有任何反应。
下面的完成处理程序永远不会被调用,尽管 URL 指向同一个文件并且它是有效的:
对于存储在 Documents 中的用户生成的文档,我没有这个问题,所以我的假设是它与自动保存有关,它在只读包上被调用并失败
但我有点卡在这部分,任何帮助将不胜感激。
iphone - 为什么加载 UIDocument 需要 40 秒?
我正在尝试加载 UIDocument 以快速预览其内容(包装在文件包装器中)。我称这段代码为:
问题是有时需要 40 秒才能获得日志,而有时只需要几毫秒。这是40秒:
这是几毫秒:
为什么会这样,我怎样才能防止它需要 40 秒?
编辑
我做了更多的测试。事实证明,这仅在加载本地文件时在模拟器中发生。有趣的是,我启动模拟器需要 40 秒。然后我再次启动模拟器,需要几毫秒。然后我再次启动模拟器,需要 40 秒。等等所以这实际上看起来像一个错误。我正在使用最新的 xCode 4.5 DP2,所以我想是时候提交错误了。
ios - Mac和iOS应用程序之间的通用iCloud容器?
我想构建一个基于 iCloud 的应用程序,它可以在 Apple 平台、iOS 和 Mac 上运行。该应用程序将使用 iOS 上的 UIDocument 和 Mac 上的 NSDocument 来建立基于文档的同步模型 - 在 iOS 上创建的文档将在 Mac 上可用,反之亦然。
我面临的特殊问题是我想要两个应用程序上的相同 iCloud 容器。XCode 根据 App ID 为应用程序创建一个默认容器,这在两个应用程序上必须不同,因为这似乎是 Apple 的要求 - 即使它们位于不同的平台上,也没有两个应用程序可以具有相同的应用程序 ID。
所以我单独留下了默认创建的容器,并在 Mac 应用程序和 iOS 应用程序上添加了另一个容器。该应用程序似乎运行良好,我可以在两个应用程序中的正确位置创建一个新文件包,但我遇到了 2 个问题:
容器未正确显示在 iCloud 设置管理屏幕中。在 XCode 的权利部分,我将容器命名为
com.mycompany.myapp.mycontainer
两个应用程序中的名称。在 iOS 的设置屏幕(设置 -> 常规 -> 使用 -> 管理存储 -> 显示全部)中,我的应用程序被列为“mycontainer”,而不是我预期的应用程序的实际名称。是否可以在应用程序的 Info.plist 中提供名称和图标以使其正确列出?我的 NSMetadataQuery 无法正常工作。我使用 Empty Application 模板制作了 iOS 应用程序,因此 Info.plist 没有使用 CFBundleDocumentTypes 键正确设置,但我发现并修复了它。为了在 iOS 应用程序中触发我的 NSMetadataQuery,我正在使用:
[self.queryCloud setPredicate:[NSPredicate predicateWithFormat:@"%K like '*.myextension*'",NSMetadataItemFSNameKey]];
搜索范围设置如下:
[self.queryCloud setSearchScopes:[NSArray arrayWithObjects:NSMetadataQueryUbiquitousDocumentsScope, NSMetadataQueryUbiquitousDataScope, nil]];
我在建立容器的 URL 后运行查询,我得到了开始和完成收集通知,但从来没有来自NSMetadataQuery
. 除非我继续创建一个新文档。如果我创建文档,那么我会收到更新通知,但仅在该会话中。下次我启动应用程序时,相同的设置不会给我任何更新通知NSMetadataQuery
。
我究竟做错了什么?任何关于创建面向 Mac 和 iOS 的 iCloud 文档应用程序的文章的指针将不胜感激!建议,想法是最受欢迎的。
objective-c - 尝试关闭 UIDocument 时防止崩溃
我想知道如何在尝试关闭 UIDoc 两次时防止崩溃。我试图在我的代码中确保您(理论上)不能关闭 UIDocument 两次。但是,它有时仍然会发生,我不知道为什么。如果是这样,应用程序会崩溃:
我试图按如下方式防止崩溃,但它没有任何效果(即它仍然会崩溃):
ios - 在 UIDocument 中存储音频文件
我有一个适用于 iCloud 的小应用程序。它将音频文件存储到云中。我注意到从第二台设备加载音频文件并不能立即工作。所以我实施
这有帮助,但它仍然运行缓慢。我想通过将音频文件包装在 UIDocument 中来加快其他 iCloud 设备上的下载过程。这甚至可能吗?我可以将文件内容存储在 NSData 中,但是有一点(看看 AVAudioPlayer 如何想要一个 URL)?我还有其他方法可以加快同步速度吗?
谢谢
ios - UIDocument 从不调用 dealloc
我有一个问题,我似乎无法解除 UIDocument(在 iCloud 中使用)
运行 NSMetaDataQuery 以查找文档后,如下所示..
我处理我的查询
然后加载或创建一个新文档。
显示NSLog(@"iCloud document opened %@", doc);
每个 UIDocument 的不同内存地址。
我的 UIDocument 子类中有一个 NSLog,它永远不会被调用。我看不到它被保留在哪里,我没有释放它。每当我想同步我的云数据时,都会运行此查询,这种情况经常发生。数据同步正确。
我遇到了奇怪的崩溃,我的应用程序将简单地靠近仪表板,调试中没有任何内容(根据以前的经验,我知道这通常是应用程序消耗太多内存并被终止。)
我认为我的 UIDocument 正在泄漏,我的假设是否正确,这是我第一次与 iCloud 搏斗,所以我仍然对一些事情一无所知。
我的子类具有以下属性:
我没有使用 ARC。
ios - 使用 UIManagedDocument 预加载核心数据数据库
嗨支持专家...我正在编写我的第一个 iPad 应用程序,并且有一个可以解析 XML 文件以UIManagedDocument
在应用程序启动时创建核心数据数据库的工作测试版副本。但是,这需要很长时间,我想在离线后完成,并将初始数据直接包含到我的应用程序包中。毋庸置疑,我正在尝试让它发挥作用。
我首先遵循了命令行实用程序方法,请参见此处这一直有效,直到我导入 .sqlite 文件并尝试编辑该persistentStoreCoordinator
方法-我使用的是 a ,因此在我UIManagedDocument
的方法中没有方法-此页面引用“在某些情况下,您不必编写任何代码来加载模型。如果您在 Mac OS X 上使用基于文档的应用程序,它会为您管理查找和加载应用程序模型的任务。”persistenStoreCoordinator
AppDelegate
NSPersistentDocument
然后,我尝试根据这个 StackOverFlow 问题UIManagedDocument
从模拟器中的应用程序的工作版本中复制它,
这似乎有效,只是它是空的,因此我的表也是。这正是这里提出的问题,但对该问题的回答让我重新开始修改我没有的方法。persistentStore
NSPersistentStoreCoordinator
我在我的代码中添加了一个测试NSFetchRequest
,我将我的应用程序包中的文件复制UIManagedDocument
到了文档目录中 - 所以我知道UIManagedDocument
我的应用程序包中的我是空的。我尝试从 finder 拖放并使用终端进行处理 - persistentStore 文件似乎已正确移动并且大小为 106 KB,但我的应用程序中仍然有一个空数据库。
关于如何让它工作的任何建议?
我是否需要configurePersistenStoreCoordinatorForURL:ofType:modleConfiguration:StoreOptions:error:
按照UIManagedDocument
类参考使用 - 如果需要,我该怎么做?
我是否需要将一些核心数据方法添加到我的 AppDelegate 中,以便我可以修改我的persistenStoreCoordinator
方法 - 如果需要,此方法还需要做什么?
persistentStore
UIManagedDocument
我是更好地使用我的命令行实用程序创建的或似乎使用的 .sqlite 数据库吗?
iphone - UIDocument 的缓慢关闭
我有一个带有 UIDocument 子类的应用程序。但问题是有时方法closeWithCompletionHandler
工作时间过长。我什至不能等到最后,这需要太多时间。问题是当我在- (id)contentsForType:(NSString *)typeName error:(NSError **)outError
方法中设置断点时,一切正常。那么,问题是什么会导致这种影响?
谢谢!