【问题标题】:Objective C. Save objects of string in file [duplicate]目标C.将字符串对象保存在文件中[重复]
【发布时间】:2013-12-03 10:33:08
【问题描述】:

我尝试在 Internet 上查找答案,但没有找到任何可以帮助我的信息。

基本上,我有这些餐馆,我想将其保存在一个文件中并延迟阅读。我将所有对象保存在一个数组中以供以后使用。

self.navigationItem.title = @"Restaurant Guide";
Restaurant *restaurant1 = [Restaurant new];
restaurant1.name=@"name1";
restaurant1.mark=@"1";
restaurant1.review=@"good";

Restaurant *restaurant2 = [Restaurant new];
restaurant2.name=@"name2";
restaurant2.mark=@"2";
restaurant2.review=@"bad";

restaurants = [NSArray arrayWithObjects:restaurant1, restaurant2, nil];
[restaurants writeToFile:(@"restaurantlist") atomically:NO];

但我认为如果我执行 writetofile 它将不起作用,因为它不是一些字符串,而是一些对象。那么我该如何进行呢?

谢谢

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    你应该在你的 Restaurant 类中实现<NSCoding> 协议,你应该在 Restaurant.m 文件中实现 2 个方法:

    - (id)initWithCoder:(NSCoder *)aDecoder
    {
        self = [super init];
        if (self) {
            _name = [aDecoder decodeObjectForKey:@"NAME"];
            _mark = [aDecoder decodeObjectForKey:@"MARK"];
            _review = [aDecoder decodeObjectForKey:@"REVIEW"];
        }
        return self;
    }
    
    - (void)encodeWithCoder:(NSCoder *)aCoder
    {
        [aCoder encodeObject:self.name forKey:@"NAME"];
        [aCoder encodeObject:self.mark forKey:@"MARK"];
        [aCoder encodeObject:self.review forKey:@"REVIEW"];
    }
    

    之后,您可以将数组保存到文件中:

    - (void)saveToFile:(NSArray*)ar
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        //data.plist is name of your file, change it if require
        NSString *path = [documentsDirectory stringByAppendingPathComponent:@"data.plist"];
    
        [ar writeToFile:path atomically:YES];
    }
    

    【讨论】:

    • writeToFile:atomically: 仅适用于属性列表对象,您必须将自定义类对象替换为编码的 NSData 对象。将数组存档并在存档上调用writeToFile:atomically: 会更容易。
    【解决方案2】:

    要将自定义对象保存在文件中,您必须将该类设置为 NSCoding 投诉。

    这是一个很好的教程http://www.raywenderlich.com/1914/nscoding-tutorial-for-ios-how-to-save-your-app-data

    基本上,您必须告诉运行时您的对象应如何转换为字节,以便可以将其保存在文件中。通过实现NSCoding 协议,您可以做到这一点。默认情况下,您的 NSDateNSStringNSNumber 等符合 NSCoding 标准,因此保存这些对象我们不会得到任何异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多