0

後で使用するためにオブジェクトを格納するために NSData を使用しています。かなりの数の NSString があり、オブジェクトから引き出す必要があります。
何らかの理由someで、NSStrings のみが保存され、他のいくつかはゼロになります! コードに問題があるに違いないと思っていたのですが、文字列を初期化するのを忘れていたに違いありませんが、非常に奇妙な理由で、文字列の一部がデータを失いました! theImportantString最初は変数が値を取得したように見えるため、関連する値を取得できませんが、から戻った後Unarchiveは @"" に等しくなります!

// CMyData.h
/////////////////////

@interface CMyData : NSObject <NSCoding>
{
    NSString *ID;
    NSString *DIST;
    .  
    .  
}
@property (nonatomic,retain) NSString *ID;
@property (nonatomic,retain) NSString *DIST;

@end

// CMyData.m
/////////////////////

#import "CMyData.h"
@implementation CMyData

@synthesize ID;
@synthesize DIST;

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        self.ID = [decoder decodeObjectForKey:@"ID"];
        self.DIST = [decoder decodeObjectForKey:@"DIST"];
    .  
    .  
 }


- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:ID forKey:@"ID"];
    [encoder encodeObject:DIST forKey:@"DIST"];
    .  
    .  

}

- (void)dealloc {
    [ID release];
    [DIST release];
    [super dealloc];

}

@end

MyController.m

-(void) makeObject: (NSDictionary *)dict
{    
    CMyData* myData=[[CMyData alloc] init];
    myData.ID = [[NSString alloc] initWithString:[dict objectForKey:@"NAME"]];
    myData.DIST = [[NSString alloc] initWithString:[dict objectForKey:@"DISTRIBUTOR"]];
    .  
    .  

    myObject = [[[MYObject alloc] init];

    myObject.data = [NSKeyedArchiver archivedDataWithRootObject:myData];
} 

そして、ボタンのタップが発生します:

- (void) tapOnIcon: (MyObject*)theObject 
{
    CMyData *data = [NSKeyedUnarchiver unarchiveObjectWithData:theObject.data];
    [delegate showData:data];
}

デリゲートコントローラーで(値を設定できなくなった場所):

delegateController.m
///////////////////////////////

-(void) showData:(CMyData*)theData{
     self.theImportantString = [[NSString alloc] initWithString:theData.DIST];
     .
     .
     .


}
4

1 に答える 1

1

タイプの不一致があるようです:

// in - (id)initWithCoder:(NSCoder *)decoder
self.DIST = [decoder decodeIntForKey:@"DIST"];

しかし、宣言ではあなたが持っています

// in CMyData.h
NSString *DIST;

これは次のようになります。

// in - (id)initWithCoder:(NSCoder *)decoder
self.DIST = [NSString stringWithFormat:@"%d", [decoder decodeIntForKey:@"DIST"]];
于 2012-10-16T12:05:41.760 に答える