gpt4 book ai didi

iphone - 如何使用 addSkipBackupAttributeToItemAtURL API?

转载 作者:可可西里 更新时间:2023-11-01 03:32:28 31 4
gpt4 key购买 nike

我的申请因为这个问题被拒绝了:

http://i.imgur.com/yajQh.png

我的应用程序是一本字典,它使用 SQL 数据库,带有书签等......

所以我从 appDelegate.m 中的 Apple 文档复制了这段代码:

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);

NSError *error = nil;
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
forKey: NSURLIsExcludedFromBackupKey error: &error];
if(!success){
NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
}
return success;
}

但像这样使用:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

[self addSkipBackupAttributeToItemAtURL:[NSURL URLWithString:@"<myApplication>/Library/Caches"]];
}

但由于这个原因而崩溃:

Assertion failed: ([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]), function -[AppDelegate addSkipBackupAttributeToItemAtURL:], file /iData/Development 2011/My iPhone Project/APPNAME/APPNAME/AppDelegate.m, line 27.

根据那张照片,这是我被拒绝的唯一问题吗?因为这是我第一次使用数据库。

谢谢。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

编辑:

- (NSString *) getDBPath
{
NSInteger kValue = [[[NSUserDefaults standardUserDefaults] stringForKey:@"Bv"] intValue];

NSString *documentsDir = [[NSString alloc] init];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
documentsDir = [paths objectAtIndex:0];


switch (kValue) {

case 0:
documentsDir = [NSString stringWithFormat:@"%@/eng-per.sqlite", documentsDir];
break;
case 1:
documentsDir = [NSString stringWithFormat:@"%@/eng-per.sqlite", documentsDir];
break;

case 2:
documentsDir = [NSString stringWithFormat:@"%@/per-eng.sqlite", documentsDir];
break;
}

return documentsDir

然后在 app delegate.m 中改成这样:

[self addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:dbClass.getDBPath]];

现在应用程序正常运行,不会崩溃

最佳答案

您的应用正在“崩溃”,因为您在线上执行了该断言:

assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);

我怀疑您的问题实际上在于您设置 URL 的方式:

[NSURL URLWithString:@"<myApplication>/Library/Caches"];

您如何获得“<myApplication>”的路径?

您需要获取应用程序的真正缓存文件夹,您可以通过以下方式完成:

[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask]; (对于通过文件 URL 传回的位置)

NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); (对于 NSString 形式的路径)

因此,最终,您需要做的是断言 key 是否已设置为默认值并且您需要为您的文件正确设置文件 URL节省。

使用类似以下内容创建您的 URL(准确地说是文件 URL):

NSArray * arrayOfURLs = [[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask];
// make certain there's at least one file url returned by the above call
if([arrayOfURLs count] > 0)
{
// and this would just be the URL to the cache directory...
NSURL * cacheDirectoryPath = [arrayOfURLs objectAtIndex: 0];

// ... to create a file url to your actual dictionary, you'd need to add a
// filename or path component.

// Assuming you save this as a property within your object
self.cacheFileURL = [cacheDirectoryPath URLByAppendingPathComponent: @"myDatabase.db"];
}

关于iphone - 如何使用 addSkipBackupAttributeToItemAtURL API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13498752/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com