作者petertom (彼得汤姆)
看板MacDev
标题Re: [问题] XCode5 测试连续建立UIDocument会失败
时间Sun Oct 6 19:17:18 2013
我也跑去之前看到这个方法的部落格问
http://goo.gl/KOpCZs
格主说可能是race condition.
他也有提出一个方式,不要建同一个名称就好
这也是可行没错~
我再来试试看其他的方式
有其他发现再来跟大家报告
再谢谢D大提供方式^^
※ 引述《petertom (彼得汤姆)》之铭言:
: 感谢回应..
: 这是一个方向,我会来试试看。
: 只是好奇的是,我是使用XCode5的XCTest来测试...
: 在我的测试程式中,
: 他的流程应该是:
: setup()时建立UIDocuemnt
: testNothing1
: teardown()时删掉UIDocument
: setup()时建立UIDocuemnt
: testNothing2
: teardown()时删掉UIDocument
: setup()时建立UIDocuemnt
: testNothing3
: teardown()时删掉UIDocument
: 前面两次都是对的
: 到testNothing3时却在setup()就会回error code 5
: 囧
: ※ 引述《darktt (小朱)》之铭言:
: : 我在使用非同步的控制也有相同问题的经验,
: : 不过我用的是 NSArray enumerateObjectsUsingBlock: ,它也是采用非同步的方式,
: : 我使用这个是要将选到的多个档案透过网路上传某个地方,
: : 因为上传的时候必须要一个一个传,所以这时後因为非同步的关系,
: : 全部档案都一起上去了。
: : 简单介绍到此为止,
: : 我想说的是,你想等待非同步做完才回传的话,你只能利用 block 做回传的动作,
: : 我测试过的用 while 与 NSLock 都没有作用,
: : 尤其是 while 在 compiler 的过程中为了避免造成无穷回圈,所以做了点手脚,
: : 所以你该做的是将 UIManagedDocument 的 saveToURL:forSaveOperation: 回传的 block
: : 接上自己的做的 block 才行。
: : 像是这样子
: : - (void)createTestDocumentWithResultBlock:(void (^) void)resultBlock
: : {
: : NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
: : url = [url URLByAppendingPathComponent:@"TestDocument"];
: : self.document = [[UIManagedDocument alloc] initWithFileURL:url];
: : [self.document saveToURL:url forSaveOperation:UIDocumentSaveForCreating
: : completionHandler:^(BOOL success){
: : if (success) {
: : resultBlock();
: : NSLog(@"Create document successfully");
: : }
: : }];
: : }
: : 之後在 block 接第二次与第三次的建立就好了。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 36.224.193.165