会社で役に立てるようにプログラムを1から勉強しているのですが、
どうしてもわからないことが出てきてしまいこちらに投稿させて頂きました。
※会社ではプログラムを使わないのですが、出来れば覚えたいです。
・やりたいことは、独自のクラスを作る。
・独自のクラスには、UserDefaultへの読み込み用、書き込み用の関数を用意する
といったことになります。
ソースがひどいですが、なんとなくそれっぽい処理を書くことが出来ました。
しかし、NSLogを呼ぶ箇所によって正しい値を取得できないことがあります。
@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
-----
// 実装部分
MyObject *myObj = [[MyObject alloc] init];
NSString *path = [NSString stringWithFormat:@"DATA_%03d", (int)indexPath.row];
[myObj readData:path];
NSLog( @"B %@ %@ ", newCheck_, self.favoraite_ );
調べてみるとinitで設定した値がBに反映されてしまっているみたいです。
こちら原因がお分かりになる方おりませんでしょうか。
くだらない質問失礼致します。