Search code examples
iosobjective-cnsstringnsmutablearraynsurlrequest

Add Several NSStrings to NSMutableArray


I have an API GET Request that runs multiple times using a for loop. I am successfully able to create some NSStrings from this, but given that the loop, I need a good way to store it all together. So, at the end of the connectionRequest, I have it run another method, where I add the NSString to an NSMutableArray. However, when I check the contents of the NSMutableArray, it's only the most recent NSString in there. What am I missing?

- (void)viewWillAppear:(BOOL)animated {

   for(int i = 0; i< self.theNumber; i++) {
        [self getQuote];
    }


}
-(void) getQuote {




    NSString *bringitalltogether = @"URLOFAPI";
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:bringitalltogether]
                                                           cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
    [request setHTTPMethod:@"GET"];


    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [connection start];

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    NSMutableDictionary *allResults = [NSJSONSerialization
                                       JSONObjectWithData:data
                                       options:NSJSONReadingAllowFragments
                                       error:nil];
    NSArray *book = [allResults valueForKey:@"bookname"];
    self.bookstring = [book objectAtIndex:0];
    NSArray *chapter = [allResults valueForKey:@"chapter"];
    self.chapterstring = [chapter objectAtIndex:0];

    NSArray *verse = [allResults valueForKey:@"verse"];
    self.versestring = [verse objectAtIndex:0];

    NSArray *text = [allResults valueForKey:@"text"];
    self.textstring = [text objectAtIndex:0];

    [self doneGotIt];
   }
- (void) doneGotIt {
    self.theArray = [[NSMutableArray alloc] init];
    NSString *doIt = [NSString stringWithFormat:@"%@ - %@ %@:%@", self.textstring, self.bookstring, self.chapterstring, self.versestring];
    [self.theArray addObject:doIt];
    NSLog(@"%@", self.theArray);
}

The console shows the NSLog running the appropriate number of times, but each time, the array stays with just one verse, when I would expect it to gradually grow.


Solution

  • You are creating the new array instance every time. thats y , u are getting the last part.

    - (void) doneGotIt {
    //Create array only once if not yet created in memory
        if (!self.theArray) {
    
            self.theArray = [[NSMutableArray alloc] init];
    
        }
    
        NSString *doIt = [NSString stringWithFormat:@"%@ - %@ %@:%@", self.textstring, self.bookstring, self.chapterstring, self.versestring];
        [self.theArray addObject:doIt];
        NSLog(@"%@", self.theArray);
    }