和许多 iOS 开发者一样,我在使用 5.1 之前的系统时也遇到过应用程序崩溃的问题NSURLIsExcludedFromBackupKey
.
很好地描述了如何评估该线程上该键的存在:
在 iOS 5.0 上使用 NSURLIsExcludedFromBackupKey 不会崩溃 https://stackoverflow.com/questions/9620651/use-nsurlisexcludedfrombackupkey-without-crashing-on-ios-5-0
One of 萨姆弗梅特的 https://stackoverflow.com/a/9629347/334266评论说iOS模拟器有一个bug。
尽管如此,我也遇到了同样的问题Release构建,即使是在 2 个独立的应用程序中。
经过一番调查后,我发现应用程序甚至在调用 main() 方法之前就崩溃了。这暗示我这与
NSString * const NSURLIsExcludedFromBackupKey;
应用程序启动时进行评估。
我不是这个领域的专家,但我发现,如果有任何参考const
值出现在代码中(即使它实际上没有在运行时访问)const
在应用程序启动时进行评估。这只会导致我们许多人经历的崩溃。
我想请你帮忙。也许您知道如何“弱”引用 const 值,或者可能有特定的编译器标志。 (使用苹果 LLVM 3.1)。
提前致谢。
请不要注释直接放置此 const 的值,在本例中为 @"NSURLIsExcludedFromBackupKey"。我知道这个解决方法,这个故事的目的是找到一个通用的解决方案。
您可以在 5.0.1 以下的系统上使用此代码
#include <sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
阅读更多here http://developer.apple.com/library/ios/#qa/qa1719/_index.html.
edit
如果您只是询问如何检查外部常量的可用性,您可以将其地址与 NULL 或 nil 进行比较。这是推荐方式 http://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/cross_development/cross_development.pdf这样做。
if (&NSURLIsExcludedFromBackupKey) {
// The const is available
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)