首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSKeyedArchiver的问题

NSKeyedArchiver的问题
EN

Stack Overflow用户
提问于 2010-09-10 23:37:02
回答 1查看 1.8K关注 0票数 0

我的NSKeyedArchiver还是有问题。我实现了所有我被告知要做的事情,但它仍然不起作用。我有点沮丧。有没有人能帮我一下?

下面是.h文件:

代码语言:javascript
运行
复制
#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文件:

代码语言:javascript
运行
复制
#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

有人知道我做错了什么吗?

谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2010-09-11 06:20:22

两个明显的错误:

您在这里肯定做错了一件事,那就是您将dealloc方法称为release。这将不起作用,并将导致意想不到的行为。

此外,在初始化方法中,您应该执行self = [super init]而不只是[super init]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3686010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档