Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IPhone持久化模型_Iphone_Persistence_Plist - Fatal编程技术网

IPhone持久化模型

IPhone持久化模型,iphone,persistence,plist,Iphone,Persistence,Plist,我想持久化类的对象(不仅仅是NSString's)。例如,我有一门课: ** News.h:** #import <Foundation/Foundation.h> @interface News : NSObject @property (nonatomic, retain) NSString * atrib1; @property (nonatomic, retain) NSString * atrib2; @end ** News.m

我想持久化类的对象(不仅仅是
NSString
's)。例如,我有一门课:

** News.h:**

    #import <Foundation/Foundation.h>
    @interface News : NSObject
    @property (nonatomic, retain) NSString * atrib1;
    @property (nonatomic, retain) NSString * atrib2;
    @end

** News.m:**

    #import "News.h"
    @implementation News
    @synthesize atrib1;
    @synthesize atrib2;
    @end
**News.h:**
#进口
@接口新闻:NSObject
@属性(非原子,保留)NSString*atrib1;
@属性(非原子,保留)NSString*atrib2;
@结束
**新闻,m:**
#导入“News.h”
@实施新闻
@合成atrib1;
@合成atrib2;
@结束
我应该使用plist来存储它吗?我应该怎么做?

使用NSCoding:

在News.m中,我补充道:

- (void) encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:atrib1 forKey:@"key1"];
    [encoder encodeObject:atrib2 forKey:@"key2"];
}

- (id)initWithCoder:(NSCoder *)decoder {
    self = [super init];
    atrib1 = [[decoder decodeObjectForKey:@"key1"] retain];
    atrib2 = [[decoder decodeObjectForKey:@"key2"] retain];
    return self;
}

-(void)dealloc{
    [super dealloc];
    [atrib1 release];
    [atrib2 release];
}
新闻h:

@interface News : NSObject<NSCoding>{
    NSCoder *coder;
}

@property (nonatomic, retain) NSString * atrib1;
@property (nonatomic, retain) NSString * atrib2;

@end

看一看谢谢!这是序列化对象的标准和推荐方法。此外,另一种方法(更简单)是将数据(如果数据足够简单)存储在字典中,如中。
- (IBAction)addANewNews:(id)sender {
//Plist File
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *plistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"myplist.plist"];

//Reading current news
NSData *oldNews = [NSData dataWithContentsOfFile:plistPath];
NSMutableArray *news = (NSMutableArray *)[NSKeyedUnarchiver unarchiveObjectWithData:oldNews];

if (news == nil) 
    news = [[NSMutableArray alloc] init];

//Adding a new news
[news addObject:aNewNews];
NSError *error;
NSData* newData = [NSKeyedArchiver archivedDataWithRootObject:news];
//persisting the updated news
BOOL success =[newData writeToFile:plistPath options:NSDataWritingAtomic error:&error];

if (!success) {
    NSLog(@"Could not write file.");
}else{
    NSLog(@"Success");
}
}