You should definitely use other mechanism. NSUserDefaults
is ok for small values, but for larger ones you could use the file system. For example:
NSString* path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
path = [path stringByAppendingPathComponent:@"Private Documents"];
path = [path stringByAppendingPathComponent:@"YourAppName"];
[[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
NSString *filePath = [self.basePath stringByAppendingPathComponent:@"filename.json"];
// Now save or load the data using NSData or an NSInputStream
NSInputStream *inputStream = [NSInputStream inputStreamWithFileAtPath:resource];
[inputStream open];
id object = [NSJSONSerialization JSONObjectWithStream:inputStream options:0 error:nil];
// you can write JSON objects in a similar way