用归档保存的对象,其子对象…

来源:互联网 发布:b站好看的视频 知乎 编辑:程序博客网 时间:2024/05/22 02:14
收藏一下,总结的不错。
原文地址:用归档保存的对象,其子对象必须也支持归档包括自定义的对象。及实现initWithCoder和encodeWithCoder方作者:Bill
对于保存对象数据到NSMutableArray 里 先要进行序列化 代码如下:
#import<Foundation/Foundation.h>


@interface ReviewUserInfo :NSObject<NSCoding> {
      NSString  *userName;
      NSString  *userReview;
      NSString  *userTime;
       float    userStarNum;
}
@property(nonatomic,copy)NSString  *userName;
@property(nonatomic,copy)NSString  *userReview;
@property(nonatomic,copy)NSString  *userTime;
@property(nonatomic,assign)float   userStarNum;
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;
@end

#import "ReviewUserInfo.h"


@implementation ReviewUserInfo
@synthesize userName;
@synthesize userTime;
@synthesize userReview;
@synthesize userStarNum;

- (void) encodeWithCoder: (NSCoder *)coder
{
       [coder encodeObject:self.userNameforKey:@"userName"];
       [coder encodeObject:self.userReviewforKey:@"userReview"];
       [coder encodeObject:self.userTimeforKey:@"userTime"];
       [coder encodeFloat:self.userStarNumforKey:@"userStarNum"];
}

- (id) initWithCoder: (NSCoder *) coder
    
       userName = [[coderdecodeObjectForKey:@"userName"]copy];
       userReview = [[coderdecodeObjectForKey:@"userReview"]copy];
       userTime = [[coderdecodeObjectForKey:@"userTime"]copy];
       userStarNum = [coderdecodeFloatForKey:@"userStarNum"];
       return self;
}
@end
------------------------
NSMutableArray*userNameArray = [[NSMutableArray alloc] init];
保存
         ReviewUserInfo    *userInfo=[[ReviewUserInfo alloc] init];
                 userInfo.userName=@"评论成功" ;
                    userInfo.userReview = @"评论成功" ;
                    userInfo.userTime = @"评论成功" ;
                    userInfo.userStarNum = 123;
                    [userNameArray addObject:userInfo];
                    [[NSUserDefaults standardUserDefaults]setObject:[NSKeyedArchiver             archivedDataWithRootObject:userNameArray]forKey:@"UserReviewName"];
读取
           NSData*dataRepresentingSavedArray = [[NSUserDefaultsstandardUserDefaults] objectForKey:@"UserReviewName"];
              if(dataRepresentingSavedArray != nil)
              {
                     NSArray*oldSavedArray = [NSKeyedUnarchiverunarchiveObjectWithData:dataRepresentingSavedArray];
                    [userNameArray setArray:oldSavedArray];
              }

用归档保存的对象,其子对象必须也支持归档包括自定义的对象。及实现initWithCoder和encodeWithCoder方法
0 0