像许多iOS开发人员一样,我在使用NSURLIsExcludedFromBackupKey时遇到了5.1之前系统崩溃的问题.
很好地描述了如何在此线程上评估此密钥的存在:
Use NSURLIsExcludedFromBackupKey without crashing on iOS 5.0
samvermette’s评论之一说iOS模拟器中有一个错误.
尽管如此,即使在2个独立的应用程序中,我也遇到了与发布版本相同的问题.
经过一些调查后,我发现即使在main()方法调用之前应用程序崩溃了.这暗示我与此有关
NSString * const NSURLIsExcludedFromBackupKey;
申请发布时的评估.
我不是这个领域的专家,但是我发现,如果在代码中出现对const值的任何引用(即使它实际上没有在运行时访问),那么这个const在应用程序启动时进行评估.而这只会导致我们许多人经历的崩溃.
我想请你帮忙.也许你知道如何’弱’引用const值,或者可能有特定的编译器标志. (使用Apple 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.
编辑
如果您只询问如何检查外部常量的可用性,则可以将其地址与NULL或nil进行比较.这是recommended way的做法.
if (&NSURLIsExcludedFromBackupKey) {
// The const is available
}