Re: [問題] XCode5 測試連續建立UIDocument會失敗

看板MacDev作者 (彼得湯姆)時間11年前 (2013/10/06 19:17), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
我也跑去之前看到這個方法的部落格問 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
文章代碼(AID): #1IKKR1m4 (MacDev)
文章代碼(AID): #1IKKR1m4 (MacDev)