【问题标题】:iPhone game savesiPhone游戏保存
【发布时间】:2011-06-15 20:16:20
【问题描述】:

如何在 iPhone 游戏中保存游戏状态?我在 NSDictionary 中都有。有人说使用 NSUserDefaults 但这似乎意味着像音量这样的东西。我找不到任何使用游戏保存的官方示例代码。苹果保存游戏状态的方法是什么?

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    如果您只想将 dict 保存为文档文件夹的 plist,则可以使用以下方法:

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString* documentDir = [documentPaths objectAtIndex:0];
        NSString * savePath = [documentDir stringByAppendingPathComponent:@"save.plist"];
        [dict writeToFile: savePath atomically: YES];
    

    【讨论】:

    • 但是如果另一个应用程序想要使用 save.plist 文件名怎么办?它会崩溃和燃烧
    • 应用无法看到彼此的文件。他们使用不同的物理位置
    • 这有点令人困惑,在 Mac 上 Document 的目录是 ~/Documents 在 iOS 中是 /Applications/someapplicationIdentifier/Documents,请查看 ~/Library/Application Support/iPhone Simulator/Someversion
    • +1 用于 plist。我用它们来存储客户信息,它比 CoreData 更快。
    【解决方案2】:

    这取决于。 NSUserDefaults 可以用于一些或小的事情,但对于更大的事情,您可能需要查看 CoreData。

    【讨论】:

      【解决方案3】:

      如果您使用 Core Data 管理所有状态,那么您可以免费保存和加载。这是大多数 iPhone 应用程序用作数据存储的原因,也是它存在的原因。

      从 NSDictionary 到 Core Data 的转换很简单,但您需要了解 Core Data 的工作原理并定义您的方案。

      NSUserDefaults 不是应该用来保存游戏状态之类的东西,它是用来保存设置之类的东西。

      【讨论】:

      • 这个有样品吗?我的问题不是序列化数据,我已经可以将它表示为字符串,问题是保存在哪里。
      • 示例在:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/… - 如果您已经在序列化数据,那么您可能离兔子洞太远了,不值得拥有 Core Data。我无法回答这个问题。但到目前为止,这是从头开始做事的正确方法。 Core Data 不会去任何地方,它是 OSX 和 iOS 技术,所以拥有它是一项很好的技能。您需要绘制数据架构,然后使用托管对象图与您的所有数据进行交互。
      【解决方案4】:

      归档用​​于在 IOS 中保存对象图。您可以通过归档来检索完整的保存状态。

      【讨论】:

        【解决方案5】:

        还有NSKeyedArchiver,它比NSUserDefaults更灵活,但不如CoreData强大。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-23
          • 1970-01-01
          • 2019-04-25
          • 2020-06-17
          • 1970-01-01
          相关资源
          最近更新 更多