iphone - NSURLIsExcludedFromBackupKey 在 iOS 5.1 之前崩溃

标签 iphone objective-c ios crash icloud

与许多 iOS 开发人员一样,我在使用 NSURLIsExcludedFromBackupKey 时遇到过应用程序在 5.1 之前的系统上崩溃的问题。

很好地描述了如何评估此线程上此 key 的存在:

Use NSURLIsExcludedFromBackupKey without crashing on iOS 5.0

samvermette's之一评论说 iOS 模拟器中存在错误。

尽管如此,我在 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 .

编辑

如果您只是询问如何检查外部常量的可用性,您可以将其地址与 NULL 或 nil 进行比较。这是recommended way这样做。

if (&NSURLIsExcludedFromBackupKey) {
    // The const is available
}

关于iphone - NSURLIsExcludedFromBackupKey 在 iOS 5.1 之前崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10635607/

相关文章:

objective-c - OSX Cocoa - 如何测试多个 NSTextField 中的更改

objective-c - 如何将 Chartboost IOS SDK 与 Swift 集成

ios - reloadRowsAtIndexPaths:@ [indexPath] withRowAnimation:UITableViewRowAnimationNone在iOS 11上工作不正确吗?

iphone - UIViewController 可以包含多个 UIView 吗?

iphone - iOS 5 核心数据卡住

objective-c - ios - 在子类化时从 UIPickerView 传递值

ios - 我们可以使用 Facebook SDK 将文档目录视频上传到 Facebook 吗?

javascript - 自动隐藏地址栏问题

iphone - iOS 5 与 iOS 4.3 上的加密

ios - UIActionSheet调用过两次?