从资源文件IOS编写和读取对象

时间:2012-04-28 14:40:17

标签: objective-c serialization file-io cocos2d-iphone

我正在为我的游戏制作关卡编辑器。我用cocos2d来制作游戏。我有一个级别节点,它是CCNode的子类,包含游戏中的所有级别对象。然后级别被添加到CCLayer。我想将级别的所有子级(NSMutableArray)保存到资源文件夹中的文件。我想加载这个NSMutableArray,循环遍历它,并将所有保存的级别对象添加到该级别。我无法在本地设备上保存这些级别对象,因为最终游戏中的级别将基于此文件,而其他设备需要将其与所有其他游戏资源一起准备好。有没有办法做到这一点,或者我必须只保存包含关卡对象的所有属性的字符串,并搜索这些字符串以获取加载关卡所需的信息?如果是这样,是否有一种方法可以将结构与NSString一起读取和写入文件?以下是我到目前为止的情况:

        NSString * filePath = @"LevelSaves.txt";
        NSString * fileRoot = [[NSBundle mainBundle]pathForResource:filePath      ofType:@"txt"];
        NSString * fileContents = [NSString stringWithContentsOfFile:fileRoot encoding:NSUTF8StringEncoding error:nil];
        NSArray * allLinedStrings = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
        ObjectFactory * objFactory = ObjectFactory::sharedObjectFactory();
        for (NSString * curString in allLinedStrings) {
            NSArray * seperatedString = [curString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@";"]];
            NSString * objectID = (NSString*)[seperatedString objectAtIndex:0];
            NSArray * properties = (NSArray*)[seperatedString objectAtIndex:1]; //not really sure about this part. Haven't tried saving anything there yet.
            objFactory->createObject(objectID,properties);

1 个答案:

答案 0 :(得分:0)

您无法在应用程序包中保存数据(我认为这是“resources”文件夹的含义)。您可以将它们保存在应用的NSDocumentDirectory中,如果您的对象符合NSCoding,则可以使用NSKeyedArchiver对其进行序列化。

执行以上操作以进行调试,当您完成编辑级别后,将其捆绑以供发布并使用NSKeyedUnarchiver进行反序列化。