【发布时间】:2012-10-09 13:52:12
【问题描述】:
我有一个从存档中读取的导入序列,解压缩包含的文件并为每个文件创建相应的核心数据实体。整个过程发生在后台,并且为每个线程等创建了一个单独的上下文,所以一切正常。
事实证明,这个特定导入序列的一个理想特性是我们允许任何输入文件受密码保护(其中有几个包含在存档中)所以我需要检查文件是否受密码保护在这种情况下,系统将提示用户通过UIAlertView 输入密码。
这是我的问题开始的地方。
我按我应该将UIAlertView 提示发送到主线程,将我的Importer object 分配为delegate 并等待用户输入。
当用户输入密码并点击 OK/Cancel 时,委托回调仍在主线程上,因此我无法在没有大量工作的情况下再操作相应的核心数据实体(即存储对托管对象 ID 的引用等,创建新的上下文等)。
我的问题:
是否可以返回正在执行导入过程的原始后台线程?我该怎么办?
谢谢, 罗格
【问题讨论】:
-
您的导入器能否使用
[NSThread currentThread]保留对其线程的引用,然后在委托回调中使用performSelector:onThread:withObject:waitUntilDone:将密码传回导入器的线程? -
在开始处理文件之前,我会检查所有文件的密码,并预先询问密码。这样,如果我正在进行长时间的导入,我可以启动它然后走开,一个小时后不回来期待它完成,然后发现它在第三个文件中等待我输入密码....
标签: objective-c ios core-data grand-central-dispatch