Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>For anybody who has the same problem, here's how I solved it: 1. Download JSON file to local storage using AFHTTPRequestOperation's output stream. 2. Parse little chunks of NSData using YAJLParser.</p> <p>Result: I was testing it on 50mb json on iPad (1), without any memory warnings (memory around 10mb).</p> <p>Example:</p> <pre><code> NSError *error = nil; NSData *data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedAlways | NSDataReadingUncached error:&amp;error]; YAJLParser *parser = [[YAJLParser alloc] initWithParserOptions:YAJLParserOptionsAllowComments]; parser.delegate = self; [parser parse:data]; parser.delegate = nil; parser = nil; </code></pre> <p>YAJLParser delegate:</p> <pre><code>// first declare in header file NSMutableArray *stack and NSString *mapKey - (void)parserDidStartDictionary:(YAJLParser *)parser { NSString *dictName = mapKey; if (mapKey == nil) { dictName = (stack.count == 0) ? @"" : [stack lastObject]; } [stack addObject:(dictName)]; } - (void)parserDidEndDictionary:(YAJLParser *)parser { mapKey = nil; [stack removeLastObject]; } - (void)parserDidStartArray:(YAJLParser *)parser { NSString *arrayName = mapKey; if (mapKey == nil) { arrayName = stack.count == 0 ? @"" : [stack lastObject]; } [stack addObject:(arrayName)]; if([mapKey isEqualToString:@"something"]) { // do something } } - (void)parserDidEndArray:(YAJLParser *)parser { if([mapKey isEqualToString:@"some1"]) { // do something } mapKey = nil; [stack removeLastObject]; } - (void)parser:(YAJLParser *)parser didMapKey:(NSString *)key { mapKey = key; } - (void)parser:(YAJLParser *)parser didAdd:(id)value { if([mapKey isEqualToString:@"id"]) { // do something } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload