Ios 目标C.将字符串的对象保存到文件中
我试着在互联网上查找答案,但没有找到任何对我有帮助的 基本上,我有这些餐厅,我想保存在一个文件中,然后晚读。我将所有对象保存在一个数组中,以便以后使用Ios 目标C.将字符串的对象保存到文件中,ios,objective-c,Ios,Objective C,我试着在互联网上查找答案,但没有找到任何对我有帮助的 基本上,我有这些餐厅,我想保存在一个文件中,然后晚读。我将所有对象保存在一个数组中,以便以后使用 self.navigationItem.title = @"Restaurant Guide"; Restaurant *restaurant1 = [Restaurant new]; restaurant1.name=@"name1"; restaurant1.mark=@"1"; restaurant1.review=@"good"; Re
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];
但我想如果我写了WriteFile,它就不会工作了,因为它不是一些字符串,而是一些对象。那我该怎么做呢
谢谢要在文件中保存自定义对象,您必须将该类设置为
NSCoding
类
这里有一个很好的教程
基本上,您必须告诉运行时如何将对象转换为字节,以便将其保存在文件中。通过实现协议,您可以做到这一点。默认情况下,您的
NSDate
,NSString
,NSNumber
等都是NSCoding
兼容的,因此保存这些对象时不会出现任何异常。要在文件中保存自定义对象,您必须将该类设置为NSCoding
投诉
这里有一个很好的教程
基本上,您必须告诉运行时如何将对象转换为字节,以便将其保存在文件中。通过实现协议,您可以做到这一点。默认情况下,您的
NSDate
,NSString
,NSNumber
等都是NSCoding
兼容的,所以保存这些对象时我们不会出现任何异常。您应该在餐厅类中实现
协议,并且应该在餐厅.m文件中实现两个方法:
- (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];
}
您应该在Restaurant类中实现
协议,并且应该在Restaurant.m文件中实现两个方法:
- (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:atomic:
仅适用于属性列表对象,您必须用编码的NSData
对象替换自定义类对象。存档数组并在存档中调用writeToFile:atomicly:
更容易。writeToFile:atomicly:
仅适用于属性列表对象,您必须用编码的NSData
对象替换自定义类对象。只需归档阵列并在归档中调用writeToFile:atomically:
,就更容易了。