与许多 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/