グランドセントラルディスパッチを使用してNSURLを設定しようとしていますが、グランドセントラルディスパッチブロックの外部でアクセスしようとするまで、変数が設定されてアクセス可能であるように見えます。
-(void)viewDidLoad {
[super viewDidLoad];
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(backgroundQueue,^{
self.ubiquitousURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
NSLog(@"ubiq inside: %@", self.ubiquitousURL);
if (self.ubiquitousURL) {
self.iCloudDocURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@Documents", self.ubiquitousURL]];
self.iCloudDocString = [self.iCloudDocURL absoluteString];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadFiles) name: UIApplicationDidBecomeActiveNotification object:nil];
} else {
/* change to the main queue if you want to do something with the UI. For example: */
dispatch_async(dispatch_get_main_queue(),^{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Please enable iCloud" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
});
}
});
NSLog(@"ubiq outside: %@", self.ubiquitousURL);
}
最初のNSLog
whichは、で始まりubiq inside
、正しいURLをubiq outside
返し、NULLを返します。私はARCを使用しているので、メモリなどについて言及する必要はありません...これはGCDの問題です。
self.ubiquitousURL
GCDブロックの外でアクセスできない理由を知っていますか?ありがとう。