iOS 5 文档目录中存储和读取文件

2024-01-06

在我的游戏中,当完成一个关卡时,应用程序会将“1”存储在应用程序文档目录中的文件中。当游戏加载时,玩家只有在完成前一关后才能玩该关卡。当我通过 Xcode 在设备上测试游戏时,应用程序可以正常运行,并且只有完成上一个关卡后才能玩该关卡。但是,当应用程序获得批准并在 App Store 上发布时,该应用程序的行为就像每个级别都已完成(没有锁定级别)。我无法弄清楚这个问题,非常感谢有人的帮助!我测试的设备都是 iOs 5.0 或更高版本。

以下是将完成的关卡保存在 Documents 目录中的代码:

 NSMutableData* data = [[NSMutableData alloc] init];
        NSKeyedArchiver* coder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
        NSString *levelString = [NSString stringWithFormat:@"Level%d",level];
        [coder encodeInteger:1 forKey:levelString];
        [coder finishEncoding];
        NSString *levelString2 = [NSString stringWithFormat:@"Level%d.save",level];
        ///
        NSFileManager *filemgr;
        NSString *dataFile;
        NSString *docsDir;
        NSArray *dirPaths;

        filemgr = [NSFileManager defaultManager];

        // Identify the documents directory
        dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

        docsDir = [dirPaths objectAtIndex:0];

        // Build the path to the data file
        dataFile = [docsDir stringByAppendingPathComponent:levelString2];

        // Check if the file already exists
        if ([filemgr fileExistsAtPath: dataFile])
        {
            [[NSFileManager defaultManager] removeItemAtPath:dataFile error:nil];
        }
        [data writeToFile:dataFile atomically:YES];
        [coder release];
        [data release];
    }
    @catch (NSException* ex) 
    {
        CCLOG(@"level save failed: %@", ex);
    }

下面是读取Document目录以查看关卡是否已完成的代码:

if ([self loadCompletedLevels:6] == 1) { //// level gets unlocked **** }

-(int) loadCompletedLevels:(int)theLevel; {

int isLevelCompleted;  //1 = completed

NSString* kSaveFile = [NSString stringWithFormat:@"Level%d.save",theLevel];
NSString *levelString = [NSString stringWithFormat:@"Level%d",theLevel];

@try
{

    NSFileManager *filemgr;
    NSString *dataFile;
    NSString *docsDir;
    NSArray *dirPaths;

    filemgr = [NSFileManager defaultManager];

    // Identify the documents directory
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    docsDir = [dirPaths objectAtIndex:0];

    // Build the path to the data file
    dataFile = [docsDir stringByAppendingPathComponent:kSaveFile];


    if ([[NSFileManager defaultManager] fileExistsAtPath:dataFile])
    {
        NSData* data = [[NSData alloc] initWithContentsOfFile:dataFile];

        if (data && [data length] > 0)
        {
            NSKeyedUnarchiver* decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
            isLevelCompleted = [decoder decodeIntForKey:levelString];

            [decoder release];
        }

        [data release];
    }
    if (isLevelCompleted == 1) {
        levelCompleted = YES;

    }
}
@catch (NSException* ex) 
{

    levelCompleted = NO;
}
return isLevelCompleted; }

您可能应该使用不同的方法来存储数据,但真正的问题是您没有初始化返回值 isLevelCompleted。它位于堆栈中,并且没有默认值。它从该堆栈位置发生的任何内容开始。

因此,如果不设置它,它将具有任意值。

另外,您可能应该使用 BOOL 作为布尔值,但如果您这样做:

int isLevelCompleted = 0;  //1 = completed

您将其初始化为“false”,因此必须通过代码将其显式更改为“true”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 5 文档目录中存储和读取文件 的相关文章

  • 将 UITableViewDataSource 与具有子视图的自定义单元格结合使用

    在 UITableView 中使用自定义单元格时 我遇到了奇怪的表格重叠 Problem 向下滚动 最后两行上面画有顶部两行 向上滚动 前两行上面画有下面两行 这是 UITableViewDataSource 的代码 func tableV
  • 如何在 AVAudioSession 内使用 iPhone XS 中内置的立体声(2 通道)麦克风?

    我试图从 iPhone XS 的所谓立体声后置麦克风获取两个通道 但在不同位置只能看到一个通道AVAudioSession and AVAudioSessionPortDescription与后置摄像头相关联 我尝试过使用AVAudioSe
  • 删除 UICollectionView 中的最后一个单元格会导致崩溃

    您好 我正在使用自定义 UICollectionView https github com SureCase WaterfallCollectionView https github com SureCase WaterfallCollec
  • 允许的 APNS 持续连接数量是多少?

    我正在尝试编写服务器端代码来为我的应用程序发送推送通知 根据 Apple 的建议 我计划保留连接并根据需要发送推送通知 Apple 还允许打开和保留多个并行连接以发送推送通知 您可以与同一网关或多个网关实例建立多个并行连接 为此 我想维护一
  • UITextView 动画更改框架不会动画文本重新分配

    我有一个 UITextView 我试图在用户点击按钮时为框架的变化设置动画 基本上 文本视图会变大以适应屏幕 以便可以显示更多文本 然后当用户再次点击按钮时 它会缩小到原始框架 我使用块执行动画 如下所示 if isDisplayingDe
  • 是否有针对不同屏幕尺寸的单独故事板?

    基本上我已经完成了一个应用程序 我唯一的问题是 ATM 机应用程序在设计时只考虑了 4 英寸显示屏 当在 3 5 英寸模拟器上运行时 应用程序会丢失 0 5 英寸 显然 那么我的问题是 如何在 Xcode 5 中为不同的屏幕尺寸设置不同的故
  • 将永久字符添加到 UITextField

    有没有办法将字母永久添加到 UITextField 中 用户无法删除它 我想添加一个字符 用户无法删除它 但他们仍然可以在之后添加字母 Cheers 附注这是适用于 iOS 的 A UITextField有一个名为 应该更改范围内的字符 的
  • 本地化现有的 iOS 应用程序

    我不敢相信以前没有人问过这个问题 要么是我的编码实践太无组织性 要么是我没有使用正确的关键字 How can I localize an existing iOS app that does not use NSLocalizedStrin
  • 打乱 NSMutableArray 而不重复并显示在 UIButton 中

    在我看来 我有 12 个按钮 一个数组包含 6 个名称 我想在其中打印数组名称UIButton标题 这是我的代码 texts NSMutableArray alloc initWithObjects 1 2 3 4 5 6 nil UIBu
  • 如何替换已弃用的方法dispatch_get_current_queue()? [复制]

    这个问题在这里已经有答案了 我正在 iOS 5 中使用 xmppframework 开发一个聊天应用程序 它工作得很好 但我将 Xcode 更新到 4 5 1 将 iOS 5 更新到 iOS 6 将 Mac OS 更新到 10 7 5 但由
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • UIScrollView setZoomScale 将应用的旋转设置回零

    我已经从事地图替换工作很长一段时间了 整个事情的工作原理是UIScrollView由一个支持CATiledLayer 为了旋转我的地图 我旋转图层本身 使用CATransform3DMakeRotation 到目前为止效果很好 但如果我打电
  • 如何接收有关与我共享的记录中所做更改的 CloudKit 通知?

    我有两个 iCloud 帐户 A and B 在两个不同的设备上 来自其中之一 A 我将 ckrecord 分享给另一个人 B 像这样 let controller UICloudSharingController controller p
  • 适用于 iPhone / iPad / iOS 的快速、精益 PDF 查看器 - 提示和提示?

    最近有很多关于绘制 PDF 的问题 是的 您可以使用UIWebView但这无法提供您所期望的优秀 PDF 查看器的性能和功能 您可以绘制PDF页面到 CALayer http www cocoabuilder com archive coc
  • UIButton的高亮状态由什么控制事件开始和结束

    我正在创建类似钢琴的视图UIButton作为钢琴键 什么UIControlEvents当按钮获得和失去突出显示状态时 我应该监听以获得回调吗 我试图创建子类UIButton并添加属性观察者highlighted并且运行良好 然而 有时我需要
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • 推送动画,没有阴影和停电

    我有一个简单的iOS NavigationController基于应用程序 二UICollectionViews 相继 如果元素打开 第一个合集 被点击时 第二集 将被打开 非常简单 重要的提示 Both UICollectionViews
  • 在 iOS 中,如何创建一个始终位于所有其他视图控制器之上的按钮?

    无论是否呈现模态或用户执行任何类型的转场 有没有办法让按钮在整个应用程序中 始终位于顶部 而不是屏幕顶部 有什么方法可以让这个按钮可拖动并可捕捉到屏幕上吗 我正在以苹果自己的辅助触摸作为此类按钮的示例 您可以通过创建自己的子类来做到这一点U
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr
  • Swift 中的 import 语句是否有相关成本?

    阅读字符串宣言 我看到一个段落 https github com apple swift blob master docs StringManifesto md batteries included关于避免Foundation不需要的时候导

随机推荐

  • 验证损失远高于训练损失

    我对深度学习模型非常陌生 并尝试使用 LSTM 和 Keras Sequential 来训练多个时间序列模型 50 年中每年有 25 个观测值 1250 个样本 因此不确定是否可以将 LSTM 用于如此小的数据 然而 我有数千个特征变量 不
  • 将 UICollectionView 滚动到底部

    我想将 UICollectionView 滚动到底部 以便最后一个项目位于视图中 我尝试使用scrollToItemAtIndexPath 但它似乎不起作用 我希望在使用 Parse com 完成查询后发生这种情况 Thanks var q
  • 更改导入模块的日志级别

    假设您的代码正在使用一个模块 使用日志语句logging info来自模块而不是logger info来自记录器实例 并且您无法控制修改正在使用的模块 是否可以只为导入的模块自定义日志记录级别 而无需请求维护人员更改代码 这些问题描述了更改
  • 无法将 System.Net.Http 包安装到 Windows Phone 7.1 Silverlight 项目中

    我使用 Nuget 安装 Microsoft ASP NET Web API 客户端库 来获取最新的 System Net Http 程序集 以便在 Windows Phone 7 1 XNA 和 Silverlight 项目中使用 它可以
  • 指定 Pandas get_dummies 的可能值列表

    假设我有一个如下所示的 Pandas DataFrame 并且我正在编码 categorical 1 以在 scikit learn 中进行训练 data numeric 1 12 1 3 2 5 5 6 8 9 9 categorical
  • Java 8 并行 forEach 进度指示

    出于性能原因 我想使用并行 Lambda 流的 forEach 循环来处理Collection在爪哇 因为这是在后台运行的Service我想使用updateProgress double double 方法 以便通知用户当前进度 为了指示当
  • 将长表转换为宽表并根据行创建列

    我有一个如下所示的数据框 Customer ID Category Products 1 Veg A 2 Veg B 3 Fruit A 3 Fruit B 3 Veg B 1 Fruit A 3 Veg C 1 Fruit C 我想找出每
  • Powershell:当元素具有“xmlns”标签时,XPath 无法选择?

    我有一个非常简单的 xml 如下所示
  • 是否可以在不发布数据的情况下更改 Azure 队列消息可见性超时?

    使用 1 6 SDK 版本 2011 08 18 您可以更改队列消息的不可见超时 然而 阅读 REST 文档 似乎表明您必须回发消息 我知道该操作是为了更新整个消息 包括不可见超时 但我只想更改不可见超时而不必重新发送整个消息 这可能吗 谢
  • Netty异步写入响应和大小未知的大数据

    我开发了一个netty http服务器 但是当我在方法ChannelInboundHandlerAdapter channelRead0中写入响应时 我的响应结果来自另一台服务器 并且结果的大小未知 因此它的http响应标头可能具有内容长度
  • 有没有办法将私有 git 存储库与 Berkshelf 一起使用

    我创建了一本名为foo 并且想要与一起使用Berkshelf 我是这样写的Berksfile cookbook foo git https bitbucket org ironsand cookbook foo git 然后将食谱卖给coo
  • PHP中的字符串是字符数组吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 就像在 C 中一样 我可以将字符串用
  • Kubernetes 中的 DNS 不工作

    我按照以下示例进行操作https github com GoogleCloudPlatform kubernetes tree master cluster addons dns https github com GoogleCloudPl
  • 如何检测网络上的 iPhone?

    我正在尝试检测我的 iPhone 是否与我的 Raspberry Pi 在同一网络中 我想当我在家并且我的 iPhone 已在我的 LAN 中注册时执行脚本 似乎当手机处于待机状态时 甚至找不到 iphone 同步端口 6207 tcp u
  • 有效 web.xml 中缺少 web-fragment.xml 元素

    在我们的项目中 我们使用 Web 片段来定义一些 servlet 以便这些工件可以轻松地在其他项目中使用 现在奇怪的是 我们有一个 web fragment xml 但它的一些内容没有添加到有效的 web xml 中 举例来说 有效的 we
  • JAVA中如何判断jdbcTemplate的sql查询类型?

    我的要求是我想确定sql查询的类型 以便我可以相应地选择jdbcTemplate方法 假设我的sql查询是插入或更新类型那么我会选择 String sql insert update sql query jdbcTemplate updat
  • File 对象中 webkitRelativePath 属性的用途是什么?

    如果你在 Chrome 控制台中打印出 File 对象 就像这样简单
  • 有人成功使用 TortoiseHg 的“自动排除列表”吗?

    我有一个配置文件 我经常修改它以进行一些测试 大约 95 的情况下 我修改此文件时 我不希望提交到存储库 在提交期间始终保持警惕是很麻烦的 我在 TortoiseHg 中发现了一个据说很漂亮的功能 称为 自动排除列表 它应该采用逗号分隔的文
  • Gradle 项目同步失败 - Android Studio

    我已经通过 Android Studio 开发 Android 应用程序大约一个月了 我最近买了一台新电脑 并尝试打开该电脑上的应用程序文件 当我打开它时 我收到一条错误横幅 Gradle 项目同步失败 基本功能 例如编辑 调试 将无法正常
  • iOS 5 文档目录中存储和读取文件

    在我的游戏中 当完成一个关卡时 应用程序会将 1 存储在应用程序文档目录中的文件中 当游戏加载时 玩家只有在完成前一关后才能玩该关卡 当我通过 Xcode 在设备上测试游戏时 应用程序可以正常运行 并且只有完成上一个关卡后才能玩该关卡 但是