Q:

Array Error: terminating with uncaught exception of type NSException

I'm trying to recreate a basic app by looking through the source code of the orignal app and learning it and then trying to retype into a separate file (and also making sure various parts in the Interface Builder match the original). One issue I'm having though is that I'm getting the following error: 

2014-05-27 14:02:10.701 Nav Ctrl Practice[3513:60b] adding stock price:  to company at index 1
2014-05-27 14:02:10.703 Nav Ctrl Practice[3513:60b] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000101a3d495 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010179c99e objc_exception_throw + 43
    2   CoreFoundation                      0x00000001019e3745 -[__NSArrayM objectAtIndex:] + 213
    3   Nav Ctrl Practice                   0x0000000100003ad2 -[ParentViewController connectionDidFinishLoading:] + 530
    4   Foundation                          0x000000010148d36b __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke + 48
    5   Foundation                          0x0000000101340bdb -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 210
    6   Foundation                          0x0000000101340aec -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 69
    7   CFNetwork                           0x0000000106950637 ___ZN27URLConnectionClient_Classic26_delegate_didFinishLoadingEU13block_pointerFvvE_block_invoke + 107
    8   CFNetwork                           0x000000010694e802 ___ZN27URLConnectionClient_Classic18_withDelegateAsyncEPKcU13block_pointerFvP16_CFURLConnectionPK33CFURLConnectionClientCurrent_VMaxE_block_invoke_2 + 84
    9   CoreFoundation                      0x00000001019e3f74 CFArrayApplyFunction + 68
    10  CFNetwork                           0x00000001068c13e7 _ZN19RunloopBlockContext7performEv + 133
    11  CFNetwork                           0x00000001068c1217 _ZN17MultiplexerSource7performEv + 247
    12  CFNetwork                           0x00000001068c103a _ZN17MultiplexerSource8_performEPv + 72
    13  CoreFoundation                      0x00000001019ccd21 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    14  CoreFoundation                      0x00000001019cc5f2 __CFRunLoopDoSources0 + 242
    15  CoreFoundation                      0x00000001019e846f __CFRunLoopRun + 767
    16  CoreFoundation                      0x00000001019e7d83 CFRunLoopRunSpecific + 467
    17  GraphicsServices                    0x0000000103bb4f04 GSEventRunModal + 161
    18  UIKit                               0x0000000100349e33 UIApplicationMain + 1010
    19  Nav Ctrl Practice                   0x0000000100005eb3 main + 115
    20  libdyld.dylib                       0x0000000101fc25fd start + 1
    21  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

I found a couple links on this site relating to the error shown above ("terminating with uncaught exception of type NSException"), however none of the specific causes seemed to match mine. The code I'm using is completely copied from a working file. So I'm not sure what I'm missing here. I've included below the source for the section where it appears to have an issue with the array.
//
//  ParentViewController.m
//

#import "ParentViewController.h"
#import "ChildViewController.h"
#import "DataAccess.h"
#import "sqlite3.h"

@interface ParentViewController ()
{

    NSMutableArray *arrayOfProducts;
    NSMutableArray *arrayOfCompanies;
    sqlite3 *productDB;
    sqlite3 *companyDB;

}

@end

@implementation ParentViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    arrayOfProducts = [[NSMutableArray alloc] init];

    [[self myTableView]setDelegate:self];
    [[self myTableView]setDataSource:self];

    self.dataAccess = [[DataAccess alloc] init];
    [self.dataAccess setCompanyListFromDB];

    self.childVC = [[ChildViewController alloc] init];

     NSMutableString *urlQuotes = [NSMutableString stringWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s="];

    for(int i =0; i<self.dataAccess.companyList.count; i++) {
        Company *company = self.dataAccess.companyList[i];
        [urlQuotes appendFormat:@"%@", company.stockSymbol];

        if(i<self.dataAccess.companyList.count-1)
    {       [urlQuotes appendString:@","];
    }
        [urlQuotes appendString:@"&f=l1,"];

        NSLog(@"Quote URL: %@", urlQuotes);

        _responseData =[[NSMutableData alloc] init];
        NSURLRequest *request = [NSURLRequest requestWithURL:
                                 [NSURL URLWithString:urlQuotes]] ; //we are creating the request here
        NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; //we are creating the url connection and firing the request here
        [conn start]; //start the connection

    }

}

#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    NSLog(@"numberOfSectionsInTableView");
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"numberOfRowsInSection");

    return [self.dataAccess.companyList count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CellIdentifier = @"Cell";

           UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"UITableViewCell"];
    }

    int row = indexPath.row;
    NSLog(@"Cell at index: %d", row);

    //Find the company for this row in the table
    Company * company = self.dataAccess.companyList[row];
    NSLog(@"Got company %@ at index: %d from companyList Array", company.name, row);

    // Configure the cell...

    //make the row's text be the company's name
    cell.textLabel.text = company.name;
    [[cell imageView] setImage: [UIImage imageNamed: company.logo]];
    cell.detailTextLabel.text = company.stockPrice;

    return cell;
}

#pragma mark - Table view delegate

// In a xib-based application, navigation from a table can be handled in -tableView:didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    int row = indexPath.row;
    NSLog(@"Cell at index: %d", row);
    self.childVC.company = self.dataAccess.companyList[row];
    //  [self.dataAccess test];
    self.childVC.dataAccess2 = self.dataAccess;
    [self.navigationController pushViewController:self.childVC animated:YES];
}

#pragma mark NSURLConnection Delegate Methods

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // Append the new data to the instance variable you declared
    [_responseData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
     NSString *str =  [[NSString alloc] initWithData:_responseData encoding:NSUTF8StringEncoding];
    NSMutableArray *responseArray= [NSMutableArray arrayWithArray:   [str componentsSeparatedByString:@"\n"]  ];

    //includes extra blank character at the end; just leaving it there for now
    NSLog(@"Response Array: %@", responseArray);

    for(int i=0;i<[self.dataAccess.companyList count];i++){
        Company *company = self.dataAccess.companyList[i];
        NSMutableString *string = responseArray[i];
        NSLog(@"adding stock price: %@ to company at index %d", string, i);
        company.stockPrice = string;

    } //simple loop for referring to items in companyList

    [self.tableView reloadData];

    NSLog (@"connectionDidFinishLoading Done");

}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog (@"connection didFailWithError: %@", error.debugDescription);

}

@end

A:

The problem appears to be in your implementation of connectionDidFinishLoading:.
for(int i=0;i<[self.dataAccess.companyList count];i++){
    Company *company = self.dataAccess.companyList[i];
    NSMutableString *string = responseArray[i];
    ...
}

Here, you use the same iterator variable (i) for both companyList and responseArray, even though they are different sizes. You should ensure that i is less than the length of both responseArray and companyList:
for(int i=0;i<[self.dataAccess.companyList count] && i<[responseArray count];i++){
    Company *company = self.dataAccess.companyList[i];
    NSMutableString *string = responseArray[i];
    ...
}

