简体   繁体   English

NSUserDefault使用NSMutableArray存储自定义对象的NSArray

[英]NSUserDefault storing an NSArray of Custom Object with NSMutableArray

I have seen good examples on how to store custom objects to an array inside NSUserDefault. 我已经看到了有关如何将自定义对象存储到NSUserDefault中的数组的好示例。 My question is, how can I do this if my Custom Object has an array as its property. 我的问题是,如果我的自定义对象将数组作为其属性,该怎么办。

I looked at an example given which got me this, however courses is an NSMutableArray. 我看了一个给出的例子,但是我的课程是NSMutableArray。

@implementation ClassNames
@synthesize courses;
@synthesize name;


- (void)encodeWithCoder:(NSCoder *)coder;
{
    [coder encodeObject:courses forKey:@"courses"];
    [coder encodeObject:name forKey:@"name"];
}

- (id)initWithCoder:(NSCoder *)coder;
{
    self = [super init];
    if (self != nil)
    {
        courses = [coder decodeObjectForKey:@"courses"] ;
        name = [coder decodeObjectForKey:@"name"] ;
    }
    return self;
}
@end

This is what I call when I want to save and load classes 当我要保存和加载类时,这就是我所说的

- (NSMutableArray *)loadClasses{
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
    NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"classes"];
    if (dataRepresentingSavedArray != nil)
    {
        NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
        if (oldSavedArray != nil)
            return [[NSMutableArray alloc] initWithArray:oldSavedArray];
        else
            return [[NSMutableArray alloc] init];
    }
    return nil;

 }




- (void)saveClasses:(ClassNames *)classes
{
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

    [standardUserDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:classes] forKey:@"classes"];
    [standardUserDefaults synchronize];

}

The NSMutableArray "courses" which is in ClassNames is an NSMutableArray of NSStrings. ClassNames中的NSMutableArray“课程”是NSStrings的NSMutableArray。

Thank you. 谢谢。

  NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
  NSString *filename = [docsPath stringByAppendingPathComponent:@"test"];   

 //store the array

 [NSKeyedArchiver archiveRootObject:myArray toFile:filename];

//get the array

 NSMutableArray* myArray = [NSKeyedUnarchiver unarchiveObjectWithFile:filename]; 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM