iphone – NSURLIsExcludedFromBackupKey在iOS 5.1之前崩溃

像许多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
}
点赞