iOS数据存储拒绝

时间:2014-05-01 10:49:06

标签: ios objective-c app-store data-storage

我的应用被拒绝了,因为Apple发现在发布和/或内容下载时,我的应用程序存储了14.18 MB。

现在我试图跳过我在游戏中使用的所有图像和声音的备份。

到目前为止,我在我的app文件夹中创建了一个名为“Resources”的文件夹,如下所示:App Folder Scrshot

我在AppDelegate.m中做了下一步:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self addSkipBackupAttributeToItemAtURL:[self applicationDocumentsDirectory]];
    return YES;
}

- (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;
}

这不起作用。

我有两个问题:

1)我从一开始就做正确的事吗?我应该将所有图像和声音放在名为Resources的文件夹中,然后将skipBackup放在整个文件夹中,还是应该将它们放在其他地方? 如果是,那么在哪里? (我看到互联网的人在谈论“文档”文件夹......但我不知道该文件夹是什么,也不知道在哪里找到它。

2)如果我可以将所有内容放在“Resources”文件夹中,如何从代码中找到该文件夹​​?如何从Xcode本身创建该文件夹的URL?

提前致谢

2 个答案:

答案 0 :(得分:0)

您应该使用您的应用提供内容。如果用户在3G / Edge上,由于连接问题,首次启动时下载内容不是一个好主意。

文档目录位于设备上,是您应用程序下的文件夹,由ios自动创建。 Apple Documentation

从资源文件夹中获取文件很简单files from resources

答案 1 :(得分:0)

之前我遇到过这个问题!问题不在于您存储的内容的大小,而是 存储它的位置。我的猜测是你将文件存储在NSDocumentDirectory中,这很糟糕,因为这个目录只能用于存储用户自己创建的数据(文档,照片等)。添加NSURLIsExcludedFromBackupKey是不够的。当它发生在我身上时,我将NSDocumentDirectory更改为NSApplicationSupportDirectory,我的应用程序获得批准。

<强>更新

最好先在NSApplicationSupportDirectory中创建一个子目录,以便将文件存储在那里。

您的方法应该类似于:

- (NSURL *) applicationDocumentsDirectory{
    NSString *appSupportDir = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject];
    appSupportDir = [appSupportDir stringByAppendingPathComponent:@"MyAppDirectory"];
    return [NSURL URLWithString:appSupportDir];
}

不要忘记先创建目录:

    if (![[NSFileManager defaultManager] fileExistsAtPath:[self applicationDocumentsDirectory] isDirectory:NULL]) {
        NSError *error = nil;        
        [[NSFileManager defaultManager] createDirectoryAtPath:[self applicationDocumentsDirectory] withIntermediateDirectories:YES attributes:nil error:&error];
    }