#import <Foundation/Foundation.h>
 
@interface MyObject : NSObject <NSCoding>{
    NSNumber *newCheck_;
    NSNumber *favoraite_;
}
 
@property(nonatomic, retain) NSNumber* newCheck_;
@property(nonatomic, retain) NSNumber* favoraite_;
 
-(void)readData:(NSString*)path;
-(void)writeData:(NSString*)path;
 
@end

@implementation MyObject
 
@synthesize newCheck_;
@synthesize favoraite_;
 
- (id)init
{
    if (self = [super init]) {
        self.newCheck_ = [NSNumber numberWithInt:0];
        self.favoraite_ = [NSNumber numberWithInt:0];
    }
    return self;
}
 
- (void)encodeWithCoder:(NSCoder *)coder {
    // シリアライズ時に呼び出される。
    [coder encodeObject:newCheck_ forKey:@"newCheck"];
    [coder encodeObject:favoraite_ forKey:@"favoraite"];
}
 
- (id)initWithCoder:(NSCoder *)coder {
    // デシリアライズ時に呼び出されるイニシャライザ
    if (self = [super init]) {
        // オブジェクトの生成ではないので、retainを忘れないように。
        newCheck_ = [[coder decodeObjectForKey:@"newCheck"] retain];
        favoraite_ = [[coder decodeObjectForKey:@"favoraite"] retain];
    }
    return self;
}
 
-(void)readData:(NSString*)path{
    
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
 
    // 空なら初期化
    if( [defaults objectForKey:path] == NULL ){
        self.newCheck_ = [NSNumber numberWithInt:0];
        self.favoraite_ = [NSNumber numberWithInt:0];
    }else{
        NSData* readData = (NSData*)[defaults objectForKey:path];
        self = [NSKeyedUnarchiver unarchiveObjectWithData:readData];
    }
 
    // test用 
    newCheck_ = [NSNumber numberWithInt:1];
    favoraite_ = [NSNumber numberWithInt:1];
    
    NSLog( @"A %@ %@ ", newCheck_, self.favoraite_ );
    
}
 
-(void)writeData:(NSString*)path{
 
    NSData* writeData = [NSKeyedArchiver archivedDataWithRootObject:self];
 
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:writeData forKey:path];
    [defaults synchronize];
    
}
 
@end

@interface TestObj
@end

@implementation TestObj
int main() {
	struct {
		int row;
	} indexPath;
	NSNumber *newCheck_ = [[NSNumber alloc] initWithInt:1];
	struct {
		NSNumber *favoraite_;
	} self;
	indexPath.row = 346;
	self.favoraite_ = [[NSNumber alloc] initWithInt:1];

	// 実装部分
	MyObject *myObj = [[MyObject alloc] init];
	NSString *path = [NSString stringWithFormat:@"DATA_%03d", (int)indexPath.row];
	[myObj readData:path];
	NSLog( @"B %@ %@ ", newCheck_, self.favoraite_ );

	return 0;
}
@end