我有以下.M一个自定义的对象类:问题与保存自定义对象NSUserDefaults的进
@implementation FolderObject
@synthesize folderTitle, folderContents; //title is NSString, contents is array
- (id)init
{
self = [super init];
if (self) {
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:foldersContents forKey:@"foldersContents"];
[coder encodeObject:folderTitle forKey:@"folderTitle"];
}
- (id)initWithCoder:(NSCoder *)coder {
self = [[FolderObject alloc] init];
if (self != nil)
{
foldersContents = [coder decodeObjectForKey:@"foldersContents"];
folderTitle = [coder decodeObjectForKey:@"folderTitle"];
}
return self;
}
@end
这里是我使用的文件夹(在某些其他类):
FolderObject *newFolder=[FolderObject alloc];
newFolder.folderTitle=[textView text];
newFolder.folderContents=[[NSMutableArray alloc]init];
[folders addObject:newFolder];
这里是我如何保存和检索自NSUserDefaults自定义对象:
-(void)viewDidDisappear:(BOOL)animated
{
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:folders] forKey:@"folders"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)viewWillAppear:(BOOL)animated
{
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArrayFolders = [currentDefaults objectForKey:@"folders"];
if (dataRepresentingSavedArrayFolders != nil)
{
NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArrayFolders];
if (oldSavedArray != nil) {
folders = [[NSMutableArray alloc] initWithArray:oldSavedArray];
}
else {
folders = [[NSMutableArray alloc] init];
}
}
else folders=[[NSMutableArray alloc] init];
最后,这里是问题的地方:
FolderObject *newFolder=[folders objectAtIndex:indexPath.row];
[folderTitleLabel setText:newFolder.folderTitle];
在第二行,我在运行时得到一个错误,但只有在我退出程序,然后回来。当我添加对象到文件夹数组并且调用上述时,没有问题。但是,如果我退出程序,然后回来,然后问题:
-[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x4b9e400
2011-09-02 08:09:24.290 MyApp[43504:b303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM isEqualToString:]: unrecognized selector sent to instance 0x4b9e400'
我实际上只是在你回答之前试过这个,但仍然没有解决问题。现在我只是遇到了一场普通的事故,但它并没有告诉我在哪里。我应该使用自我吗? – Snowman
您的@property是用'retain'还是'copy'声明的?其他一切似乎都是正确的。 – Joe
这是宣布nonatomic,保留。 foldersContent是一个NSMutableArray,如果这有什么区别 – Snowman