我使用类功能。但我面临一个新问题,我必须检查icloud是否可用,我使用:
+ (BOOL)isIcloudAvailable {
BOOL isBothIcloudenabled = NO;
BOOL isIcloudAvailable = NO;
NSURL *ubiq = [[NSFileManager defaultManager]
URLForUbiquityContainerIdentifier:nil];
if (ubiq) {
isIcloudAvailable = YES;
} else {
isIcloudAvailable = NO;
}
NSUserDefaults *aUseriCloud = [NSUserDefaults standardUserDefaults];
BOOL boolPref = [aUseriCloud boolForKey:@"icloudEnabled"];
if (boolPref && isIcloudAvailable)
{
isBothIcloudenabled = YES;
}
else {
isBothIcloudenabled = NO;
}
return isBothIcloudenabled;
}
在我的UIVIewController上使用:
if ([utils isIcloudAvailable])
{...
}
URLForUbiquityContainerIdentifier:必须在主线程上调用nil,我该怎么做?我只知道dispatch_async但它不适用于返回函数。
由于
答案 0 :(得分:2)
您的UIViewController应该在主线程上运行,因此不需要调度。如果您从另一个线程调用UIViewController方法,我建议您在主线程上使用dispatch_async运行该方法的调用,而不是在方法本身中执行。也就是说,UIViewController中的所有方法调用都在主线程上完成。
尽管如此,块可以设置超出其范围的值:
bool isCloudAvailable = NO;
dispatch_sync(dispatch_get_main_queue(), ^{
isCloudAvailable = [utils isIcloudAvailable];
});
这将阻塞线程,直到主线程运行块为止。