I need to save an NSMutableArray to disk in order to store my application data. I know there are a lot of similiar questions out there but none of them I found covers my question.
I do not want to integrate Core Data just for saving one NSMutableArray. Normally I would go for implementing the NSCoding protocol and using NSKeyedUnarchiver. Unfortunately, my data model class has some foreign classes from a library which do not implement the NSCoding protocol.
So what is the best way for me to store my array?
This is what I tried but because of the given reasons it won't work:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <ForeignFramework/ForeignFramework.h>
@interface DEModelClass : NSObject <NSCoding>
@property (nonatomic,strong) ForeignFramework *foreignFramework;
@property (nonatomic,strong) UIImage *image;
@property (nonatomic,copy) NSNumber *number1;
@property (nonatomic,copy) NSNumber *number2;
@end
#define kEncodeKeyForeign @"kEncodeKeyForeign"
#define kEncodeKeyImage @"kEncodeKeyImage"
#define kEncodeKeyNumber1 @"kEncodeKeyNumber1"
#define kEncodeKeyNumber2 @"kEncodeKeyNumber2"
#pragma mark - NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.foreignFramework forKey:kEncodeKey];
[aCoder encodeObject:self.image forKey:kEncodeKeyImage];
[aCoder encodeObject:self.number1 forKey:kEncodeKeyNumber1];
[aCoder encodeObject:self.number2 forKey:kEncodeKeyNumber2];
}
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super init]))
{
self.foreignFramework = [aDecoder decodeObjectForKey:kEncodeKeyForeign];
self.image = [aDecoder decodeObjectForKey:kEncodeKeyImage];
self.number1 = [aDecoder decodeObjectForKey:kEncodeKeyNumber1];
self.number2 = [aDecoder decodeObjectForKey:kEncodeKeyNumber2];
}
return self;
}
NSUserDefaults?plistfile programmatically and store your data in it, and retrieve when needed. Check out THIS. Apple's own code to save data toplist.image,number1andnumber2. Can't say anything aboutforeignFramework.