2011-11-25 77 views
3

我有这样的代码(我尝试打开从云文档):openWithCompletionHandler完成处理参数始终= NO

NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K ENDSWITH '.card'", NSMetadataItemFSNameKey]; 

NSMetadataQuery *query = [[NSMetadataQuery alloc] init]; 
[query setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]]; 
[query setPredicate:pred]; 

[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(queryDidFinishGathering:) 
name:NSMetadataQueryDidFinishGatheringNotification 
object:query]; 

[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(queryDidStartGathering:) 
name:NSMetadataQueryDidStartGatheringNotification 
object:query]; 

[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(queryDidUpdate:) 
name:NSMetadataQueryDidUpdateNotification 
object:query]; 

[query startQuery]; 

// ================= ======== openWithCompletionHandler完成块的

- (void)queryDidFinishGathering:(NSNotification *)notification { 

    NSMetadataQuery *query = [notification object]; 
    [query disableUpdates]; 
    [query stopQuery]; 

    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:NSMetadataQueryDidFinishGatheringNotification 
                object:query]; 

    for (NSMetadataItem* item in [query results]) { 
     NSURL *url = [item valueForAttribute:NSMetadataItemURLKey]; 
     BCCardDocument *doc = [[[BCCardDocument alloc] initWithFileURL:url] autorelease]; 
     [doc openWithCompletionHandler:^(BOOL success) { 
      if (success) { 
       NSLog(@"%@", doc.card.number); 
      } 
     }]; 

    } 

} 

成功参数始终等于NO。这可能是什么原因?

回答

1

我无法确切地告诉你你需要做什么,但是我可以告诉你如何得到错误信息,以便你能弄明白。

在你BCCardDocument类的@implementation部分,添加这样的事情:

- (void)handleError:(NSError *)error userInteractionPermitted:(BOOL)userInteractionPermitted { 
    NSLog(@"Error: %@ userInfo=%@", error.localizedDescription, error.userInfo); 
    [super handleError:error userInteractionPermitted:userInteractionPermitted]; 
} 
0

我有非常类似的代码,它工作正常。我假设你的BCCardDocument是UIDocument的子类?如果是这样,它需要有这两种方法:

- (id)contentsForType:(NSString *)typeName error:(NSError **)outError 

- (BOOL)loadFromContents:(id)contents 
       ofType:(NSString *)typeName 
       error:(NSError *__autoreleasing *)outError { 

唯一的区别是,我不叫stopQuery。