- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试打开多个 UIDocument
循环中的实例,使用 - (void)openWithCompletionHandler:(void (^)(BOOL success))completionHandler
.
准确地说,我正在从文档文件夹加载一个文件列表,每个文件代表一个可以登录我的应用程序的用户。现在,显然我想在所有用户/UIDocument
之后显示我的登录对话框被打开。不幸的是,我似乎无法为此想出一个好的方法。我所拥有的是:
-(void)reloadUsers
{
__block int cnt= 0;
NSArray* localDocuments = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[AppDelegate localDocumentsDirectoryURL] path] error:nil];
for (NSString* document in localDocuments)
{
if (![document hasSuffix:@".user"])
continue;
// User beeing UIDocument subclass
User* user=[[[User alloc] initWithFileURL:[NSURL fileURLWithPath:[[[AppDelegate localDocumentsDirectoryURL] path]
stringByAppendingPathComponent:document]]] autorelease];
NSLog(@"Opening user document at url '%@'/'%@' ...", [AppDelegate localDocumentsDirectoryURL], document);
[user openWithCompletionHandler:^(BOOL success)
{
[self.userList addObject:user];
cnt++;
}];
}
NSLog(@"Loaded %d local users", cnt);
}
问题 1:最后的 NSLog 是否会工作并显示实际加载的用户数,还是自 cnt++
以来它是一个随机值?是异步完成的吗?
问题 2:如何更改上述功能,以便我可以安全地执行以下操作:
{ // app finished loading
[MyClass reloadUsers];
[LoginDialog show]; // this shall happen AFTER reloadUsers has loaded ALL documents
}
最佳答案
我发现将循环转换为递归是序列化异步操作的有用方法。例如(这是一些记事本编程,可能无法编译,但你明白了):
此函数递归加载所有文档,然后调用完成处理程序:
- (void)loadDoc:(int)doc in:(NSArray*)localDocuments withCompletion:(void(^)(void))completion
{
if (doc == [localDocuments count])
{
completion();
}
else
{
NSString* document = localDocuments[doc];
if (![document hasSuffix:@".user"])
{
[self loadDoc:doc + 1 in:localDocuments withCompletion:completion];
}
else
{
User* user=[[[User alloc] initWithFileURL:[NSURL fileURLWithPath:[[[AppDelegate localDocumentsDirectoryURL] path]
stringByAppendingPathComponent:document]]] autorelease];
[user openWithCompletionHandler:^(BOOL success)
{
[self.userList addObject:user];
[self loadDoc:doc + 1 in:localDocuments withCompletion:completion];
}];
}
}
}
为方便起见:
-(void)reloadUsersWithCompletion:(void(^)(void))completion
{
NSArray* localDocuments = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[AppDelegate localDocumentsDirectoryURL] path] error:nil];
[self loadDoc:0 in:localDocuments withCompletion:completion];
}
然后显示您的对话:
{ // app finished loading
[MyClass reloadUsersWithCompletion:^(void) {
[LoginDialog show]; // this shall happen AFTER reloadUsers has loaded ALL documents
}];
}
当然还有其他涉及线程和同步机制的方法,但在我看来没有那么简单。
关于ios - 循环打开 UIDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23043606/
我尝试通过以下方式打开文档文件,但没有任何反应。我也尝试过其他方法,但它对我不起作用。打开文档文件(doc、docx、pdf、ppt 等)的正确方法是什么。我在 UIWebView() 的某处读到这也
我正在尝试打开多个 UIDocument循环中的实例,使用 - (void)openWithCompletionHandler:(void (^)(BOOL success))completionHa
我目前正在使用 UIDocument 子类将我现有的应用程序从 CoreData 存储重新设计为基于文档的应用程序。这主要是为了能够引入 iCloud 同步,因为 CoreData 中的 iCloud
无论我怎么尝试,这都行不通... 我正在尝试使用 UIDocument 在本地保存我的(文本)文件。当我创建一个文件(即它没有加载)时,它保存得很好。 但是,如果我通过打开文件加载我的文件然后保存它,
我正在处理云中的文档... * 将文档添加到云端 * 从云端删除该文件 * 不知何故,该文件在几秒钟后重新出现。 以下是详细信息: 我像这样创建了一个 UIDocument 实例 NSURL
我有一个带有 UIDocument 的基于文档的 iOS 应用程序子类。我需要能够在文件系统上移动它代表的文件。我考虑过用 NSFileManager 移动它, 但这会弄乱 UIDocument的fi
我有一个 UIDocument,我希望它由 (1) 一个 txt 文件和 (2) 几个 jpg 图像组成。我将 txt 和所有 jpg 放入 NSFileWrapper 中。 当我加载 UIDocum
我正在尝试遵循本教程... https://www.raywenderlich.com/131668/document-provider-tutorial 我已经到了这一部分... 但是我无法弄清楚在
我设置 UIDocument 以将我的文件保存到设备。我用 标记一个文件需要保存 [ myDoc updateChangeCount:UIDocumentChangeDone ] 现在看来,保存操作只
这可能是一个幼稚的问题 - 但我想仔细检查以避免在 UIDocument 上浪费时间,如果它不符合我的要求的话。 背景:我有一个应用程序,我为其创建了一个简单的文件系统来将用户创建的文档保存为 pli
我使用过 UIDocument,但我不明白与使用 Archiving 相比有何优势?假设您不想使用 iCloud。 最佳答案 来自 Apple 的文档:http://developer.apple.c
我正在使用 Xcode。 在我的应用程序中,我在那个位置保存了一些 UIdocuments [[NSFileManager defaultManager] URLsForDirectory:NSDoc
我一直在尝试向 UIDocument 应用程序的图标添加缩略图。我给出的例子相对简单。通过重写 UIDocument 类中的 fileAttributesToWrite 函数,将图像分配给 thumb
Apple 的 iOS 基于文档的应用程序编程指南显示了构建 FileRepresentation 对象列表以显示文档索引的示例代码。最初没有创建 UIDocument 的实例。然后,当打开文档时,将
创建了UIDocument(XDocument)的子类,由于数据量大,需要一些时间来保存文档。 因此,当我使用 closewithcompletionhandler 关闭 XDocument 实例时,
我在 Swift 中使用 DocumentBrowserViewController 将文档呈现给 ViewController。在 ViewController 中,我有一个 tableView 来
我在我的应用程序中使用文档包(通过 FileWrapper API)并且我使用 UIDocumentBrowserViewController 类进行文档管理。文档包基本上表示(文本)文件和文件夹的层
我有一个基于文档的 iOS 应用程序,当它第一次打开文档时,主视图 Controller 调用 UIDocument.open。 document.open { success in if s
当一个 UIDocument 被关闭时,它还能再次关闭吗?即使它的 documentState 在重新打开后是 UIDocumentStateNormal? 请帮帮我。非常感谢! [document
当我尝试通过 iCloud 同步/共享的文件本质上是一个 NSDictionary 时,我试图弄清楚 UIDocument 子类到底应该是什么样子。 字典文件(plist)有一堆键是主键。每个键都可以
我是一名优秀的程序员,十分优秀!