Spa*_*het 3 iphone objective-c nscoding
我想写一个Question对象数组到文件,但不知何故writeToFile没有做任何事情.一个问题有一个所有者和一组Answer对象.答案也有所有者.所有这三个都符合NSCoding协议(据我所知).
从下面的代码中,结果返回NO.不知道我做错了什么,因为我正在为所有事情实施NSCoding,对吧?
Question.h
#import <Foundation/Foundation.h>
#import "Owner.h"
@interface Question : NSObject <NSCoding> {
NSString *questionId;
NSString *questionRevision;
NSString *text;
NSDate *date;
NSMutableArray *answers;
NSString *page;
NSNumber *questionLocation;
Owner *owner;
}
@property (nonatomic, retain) NSString *questionId;
@property (nonatomic, retain) NSString *questionRevision;
@property (nonatomic, retain) NSString *text;
@property (nonatomic, retain) NSDate *date;
@property (nonatomic, retain) NSMutableArray *answers;
@property (nonatomic, retain) NSString *page;
@property (nonatomic, retain) NSNumber *questionLocation;
@property (nonatomic, retain) Owner *owner;
@end
Run Code Online (Sandbox Code Playgroud)
Question.m
#import "Question.h"
#import "Answer.h"
@implementation Question
@synthesize questionId, questionRevision, text, date, answers, page, questionLocation, owner;
- (void)encodeWithCoder:(NSCoder *)coder
{
//[super encodeWithCoder:coder];
[coder encodeObject:questionId forKey:@"questionId"];
[coder encodeObject:questionRevision forKey:@"questionRevision"];
[coder encodeObject:text forKey:@"text"];
[coder encodeObject:date forKey:@"date"];
[coder encodeObject:answers forKey:@"answers"];
[coder encodeObject:page forKey:@"page"];
[coder encodeObject:questionLocation forKey:@"questionLocation"];
[coder encodeObject:owner forKey:@"owner"];
}
- (id)initWithCoder:(NSCoder *)decoder
{
//self = [super initWithCoder:decoder];
self = [super init];
self.questionId = [decoder decodeObjectForKey:@"questionId"];
self.questionRevision = [decoder decodeObjectForKey:@"questionRevision"];
self.text = [decoder decodeObjectForKey:@"text"];
self.date = [decoder decodeObjectForKey:@"date"];
self.answers = [decoder decodeObjectForKey:@"answers"];
self.page = [decoder decodeObjectForKey:@"page"];
self.questionLocation = [decoder decodeObjectForKey:@"questionLocation"];
self.owner = [decoder decodeObjectForKey:@"owner"];
}
@end
Run Code Online (Sandbox Code Playgroud)
Answer.h
#import <Foundation/Foundation.h>
#import "Owner.h"
@interface Answer : NSObject <NSCoding> {
Owner *owner;
NSString *text;
NSDate *date;
}
@property (nonatomic, retain) Owner *owner;
@property (nonatomic, retain) NSString *text;
@property (nonatomic, retain) NSDate *date;
@end
Run Code Online (Sandbox Code Playgroud)
Answer.m
#import "Answer.h"
@implementation Answer
@synthesize owner, text, date;
- (void)encodeWithCoder:(NSCoder *)coder
{
//[super encodeWithCoder:coder];
[coder encodeObject:owner forKey:@"owner"];
[coder encodeObject:text forKey:@"text"];
[coder encodeObject:date forKey:@"date"];
}
- (id)initWithCoder:(NSCoder *)decoder
{
//self = [super initWithCoder:decoder];
self = [super init];
self.owner = [decoder decodeObjectForKey:@"owner"];
self.text = [decoder decodeObjectForKey:@"text"];
self.date = [decoder decodeObjectForKey:@"date"];
}
@end
Run Code Online (Sandbox Code Playgroud)
Owner.h
#import <Foundation/Foundation.h>
@interface Owner : NSObject <NSCoding> {
NSString *name;
NSString *photoFileName;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *photoFileName;
@end
Run Code Online (Sandbox Code Playgroud)
Owner.m
#import "Owner.h"
@implementation Owner
@synthesize name, photoFileName;
- (void)encodeWithCoder:(NSCoder *)coder
{
//[super encodeWithCoder:coder];
[coder encodeObject:name forKey:@"name"];
[coder encodeObject:photoFileName forKey:@"photoFileName"];
}
- (id)initWithCoder:(NSCoder *)decoder
{
//self = [super initWithCoder:decoder];
self = [super init];
self.name = [decoder decodeObjectForKey:@"name"];
self.photoFileName = [decoder decodeObjectForKey:@"photoFileName"];
}
@end
Run Code Online (Sandbox Code Playgroud)
相关的代码行
BOOL result = [questions writeToFile:@"Users/brunoscheele/Desktop/questions.plist" atomically:YES];
一二三*_*一二三 10
writeToFile:atomically:写入属性列表文件,而不是序列化档案.无法通过实现扩展属性列表类型NSCoding,并且由于您的对象不是属性列表支持的类型之一,因此无法将它们写入属性列表.
要归档对象,您需要使用NSAchiver,例如:
[NSKeyedArchiver archiveRootObject:questions
toFile:@"some/path/questions.archive"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3337 次 |
| 最近记录: |