iCloud:在 OS X 上获取云中存在的一系列 txt 文件
Posted
技术标签:
【中文标题】iCloud:在 OS X 上获取云中存在的一系列 txt 文件【英文标题】:iCloud: Getting an array of txt files present in the cloud on OS X 【发布时间】:2012-03-17 03:25:36 【问题描述】:我正在尝试使用 Apple 推荐的 NSMetadataQuery 在我的应用程序的 iCloud 文件夹中获取一组 txt 文件:
NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
[query setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K ENDSWITH '.txt'", NSMetadataItemFSNameKey];
[query setPredicate:pred];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryDidFinishGathering:) name:NSMetadataQueryDidFinishGatheringNotification object:query];
[query startQuery];
不幸的是 queryDidFinishGathering: 永远不会被调用。我做错了什么?
谢谢!
【问题讨论】:
【参考方案1】:您正在使用 ARC,这意味着您需要保留对您分配的对象的强引用,否则它们将消失。
您在 query
对象上调用 alloc
,这在手动保留/释放下意味着 query
对象将保持活动状态,直到您向其发送 release
或 autorelease
消息。
但是,在 ARC 下,编译器会为您插入这些调用,因为它不知道您希望 query
对象保留,它会在您调用 [query startQuery]
后释放 query
对象。因为该对象已被释放,所以它永远不会发布通知。
您应该持有对query
对象的强引用。最直接的方法是将其设置为实例变量或strong
属性。
@interface YourObject : NSObject
NSMetadataQuery *query;
@end
或
@interface YourObject : NSObject
@property (strong) NSMetadataQuery *query;
@end
【讨论】:
以上是关于iCloud:在 OS X 上获取云中存在的一系列 txt 文件的主要内容,如果未能解决你的问题,请参考以下文章
仅为 OS X 10.8.x 和 iOS 6.x 在 iCloud 中启用核心数据同步
防止在 OS X 中启动时出现 iCloud 打开文件对话框 [重复]