2010-09-10 85 views
0

我仍然有問題與NSKeyedArchiver。 我實現了所有我被告知要做的事情,但它仍然不起作用。我有點沮喪。那麼有人能幫我嗎?問題與NSKeyedArchiver

這裏是.h文件:

#import <Foundation/Foundation.h> 

#import "JFIdentifier.h" // This is my own class to create a unique identifier for every JKDataObject 


@interface JKDataObject : NSObject <NSCoding> { 
    NSUInteger identifier; 
    NSString *user; 
    NSDate *creationDate; 
    NSDate *alteredDate;  
} 
#pragma mark - 

#pragma mark Setter 
- (void)setIdentifier:(NSUInteger)newIdentifier silent:(BOOL)silent; 
- (void)setUser:(NSString *)newUser silent:(BOOL)silent; 
- (void)setCreationDate:(NSDate *)newCreationDate silent:(BOOL)silent; 
- (void)setAlteredDate:(NSDate *)newAlteredDate; 
#pragma mark - 

#pragma mark Getter 
- (NSUInteger)identifier; 
- (NSString *)user; 
- (NSDate *)creationDate; 
- (NSDate *)alteredDate; 
#pragma mark - 

#pragma mark Methods 
- (void)dataObjectWasAltered:(JKDataObject *)alteredObject; 
#pragma mark - 

@end 

,這是.m文件:

#import "JKDataObject.h" 


@implementation JKDataObject 
#pragma mark - 

#pragma mark Initiation 
- (id)init { 
    [super init]; 

    identifier = [JFIdentifier createIdentifier]; 

    user = [[NSString alloc] initWithString:NSUserName()]; 

    creationDate = [[NSDate alloc] initWithTimeIntervalSinceNow:0]; 
    alteredDate = [[NSDate alloc] initWithTimeIntervalSinceNow:0];; 

    return self; 
} 
- (id)initWithCoder:(NSCoder *)decoder { 
    [super init]; 

    identifier = [decoder decodeIntegerForKey:@"identifier"]; 
    user = [[decoder decodeObjectForKey:@"user"] retain]; 
    creationDate = [[decoder decodeObjectForKey:@"creationDate"] retain]; 
    alteredDate = [[decoder decodeObjectForKey:@"alteredDate"] retain]; 

    return self; 
} 
- (void)encodeWithCoder:(NSCoder *)encoder { 
// [super encodeWithCoder:encoder]; 

    [encoder encodeInteger:identifier forKey:@"identifier"]; 
    [encoder encodeObject:user forKey:@"user"]; 
    [encoder encodeObject:creationDate forKey:@"creationDate"]; 
    [encoder encodeObject:alteredDate forKey:@"alteredDate"]; 
} 

- (void)release { 
    [user release]; 
    [creationDate release]; 
    [alteredDate release]; 

    [super release]; 
} 
#pragma mark - 

#pragma mark Setter 
- (void)setIdentifier:(NSUInteger)newIdentifier silent:(BOOL)silent { 
    identifier = newIdentifier; 

    if (!silent) { 
     [self dataObjectWasAltered:self]; 
    } 
} 
- (void)setUser:(NSString *)newUser silent:(BOOL)silent { 
    user = newUser; 

    if (!silent) { 
     [self dataObjectWasAltered:self]; 
    } 
} 
- (void)setCreationDate:(NSDate *)newCreationDate silent:(BOOL)silent { 
    creationDate = newCreationDate; 

    if (!silent) { 
     [self dataObjectWasAltered:self]; 
    } 
} 
- (void)setAlteredDate:(NSDate *)newAlteredDate { 
    alteredDate = newAlteredDate; 
} 
#pragma mark - 

#pragma mark Getter 
- (NSUInteger)identifier { 
    return identifier; 
} 
- (NSString *)user { 
    return user; 
} 
- (NSDate *)creationDate { 
    return creationDate; 
} 
- (NSDate *)alteredDate { 
    return alteredDate; 
} 
#pragma mark - 

#pragma mark Methods 
- (void)dataObjectWasAltered:(JKDataObject *)alteredObject { 
    alteredDate = [[NSDate alloc] initWithTimeIntervalSinceNow:0]; 
} 
#pragma mark - 

@end 

有誰知道我做錯了什麼?

謝謝!

+0

你忘了提及它不工作的方式。你嘗試了什麼,預期的結果是什麼,實際發生了什麼? – 2010-09-10 22:17:45

回答

0

兩個明顯的錯誤:

有一件事你肯定做錯了這裏是你叫你dealloc方法release代替。這不會起作用,並會導致意想不到的行爲。

此外,在你的init方法中,你應該做self = [super init]而不是[super init]