SIGABRT on accessing NSMutableArray

1

I'm having trouble with one particular error; I'm getting "SIGABRT" on this line:

cell.textLabel.text = [collections objectAtIndex: [indexPath row]];

My header file:

#import <UIKit/UIKit.h>

@interface CollectionsViewController : UITableViewController {
    NSMutableArray *collections;
    NSMutableData *responseData;
}
@property (nonatomic, retain) NSMutableArray *collections;

@end

and implementation file:

#import "CollectionsViewController.h"
#import "JSON.h"


@implementation CollectionsViewController
@synthesize collections;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}



- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    self.collections = nil;
}

- (void)viewWillAppear:(BOOL)animated
{

    collections = [[NSMutableArray alloc] init];
    responseData = [[NSMutableData data]retain];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.unpossible.com/misc/lucky_numbers.json"]];
    [[NSURLConnection alloc] initWithRequest:request delegate:self];


    [super viewWillAppear:animated];

    //[self.tableView reloadData];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Error connecting: \"%@\"", [error description]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [connection release];

    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    [responseData release];

    NSArray *luckyNumbers = [responseString JSONValue];


    for (int i = 0; i < [luckyNumbers count]; i++)
        [collections addObject:[luckyNumbers objectAtIndex:i]];

    for (int j = 0; j < [collections count]; j++)
        NSLog(@"This is \"%@\"", [collections objectAtIndex:j]);

    [self.tableView reloadData];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [collections release];
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [collections count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

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

    // Configure the cell...
    NSLog(@"Counter \"%u\"", [collections count]);
    cell.textLabel.text = [collections objectAtIndex: [indexPath row]];
    return cell;
}



#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
     */
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)dealloc {
    [collections release];
    [super dealloc];
}

@end

Minus most of the commented-out stuff.

And finally my log:

2011-11-15 16:41:10.366 Clarke & Clarke[834:b303] This is "13"
2011-11-15 16:41:10.367 Clarke & Clarke[834:b303] This is "3"
2011-11-15 16:41:10.368 Clarke & Clarke[834:b303] This is "73"
2011-11-15 16:41:10.368 Clarke & Clarke[834:b303] This is "31"
2011-11-15 16:41:10.369 Clarke & Clarke[834:b303] Counter "4"
2011-11-15 16:41:10.370 Clarke & Clarke[834:b303] -[NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x4b699b0
2011-11-15 16:41:10.372 Clarke & Clarke[834:b303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x4b699b0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00dde5a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x00f32313 objc_exception_throw + 44
    2   CoreFoundation                      0x00de00bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x00d4f966 ___forwarding___ + 966
    4   CoreFoundation                      0x00d4f522 _CF_forwarding_prep_0 + 50
    5   UIKit                               0x00151afc -[UILabel setText:] + 72
    6   Clarke & Clarke                     0x0000316f -[CollectionsViewController tableView:cellForRowAtIndexPath:] + 399
    7   UIKit                               0x000a5b98 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 634
    8   UIKit                               0x0009b4cc -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
    9   UIKit                               0x000b08cc -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
    10  UIKit                               0x000a890c -[UITableView layoutSubviews] + 242
    11  QuartzCore                          0x016c8a5a -[CALayer layoutSublayers] + 181
    12  QuartzCore                          0x016caddc CALayerLayoutIfNeeded + 220
    13  QuartzCore                          0x016700b4 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
    14  QuartzCore                          0x01671294 _ZN2CA11Transaction6commitEv + 292
    15  QuartzCore                          0x0167146d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
    16  CoreFoundation                      0x00dbf89b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
    17  CoreFoundation                      0x00d546e7 __CFRunLoopDoObservers + 295
    18  CoreFoundation                      0x00d1d1d7 __CFRunLoopRun + 1575
    19  CoreFoundation                      0x00d1c840 CFRunLoopRunSpecific + 208
    20  CoreFoundation                      0x00d1c761 CFRunLoopRunInMode + 97
    21  GraphicsServices                    0x010161c4 GSEventRunModal + 217
    22  GraphicsServices                    0x01016289 GSEventRun + 115
    23  UIKit                               0x0003ec93 UIApplicationMain + 1160
    24  Clarke & Clarke                     0x00001b29 main + 121
    25  Clarke & Clarke                     0x00001aa5 start + 53
    26  ???                                 0x00000001 0x0 + 1
)
terminate called throwing an exceptionsharedlibrary apply-load-rules all
Current language:  auto; currently objective-c

I've tried but can't see the error. Could anyone educate me?

objective-c
ios
cocoa-touch
nsmutablearray
asked on Stack Overflow Nov 15, 2011 by TMPilot • edited Nov 15, 2011 by jscs

4 Answers

5

The error is 2011-11-15 16:41:10.370 Clarke & Clarke[834:b303] -[NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x4b699b0

You try to set a text with an int

Prefer:

cell.textLabel.text = [NSString stringWithFormat:@"%d",[collections objectAtIndex: [indexPath row]]];
answered on Stack Overflow Nov 15, 2011 by Mathieu Hausherr
0

When you get a SIGABRT error, a lot of times it is because something that you're trying to change doesn't exist. Check that all your variables and pointers have been allocated when needed and you are assigning real values and not a nil.

answered on Stack Overflow Nov 15, 2011 by brandonbocklund
0

look carefuly what exacly you put into you NSMutableArray *collections, becouse there is something is not what you whant to be:

-[NSCFNumber isEqualToString:]: unrecognized selector sent to instance

there is NSCFNumber in your array. when you trying add it to your textLabel, SKD chacks if it is a string (isEqualToString). So, it doesn't. Or, if it is OK, that NSCFNumber in your array, you need to convent it to string first:

cell.textLabel.text = [NSString stringWithFormat:"%@", [collections objectAtIndex: [indexPath row]]];
answered on Stack Overflow Nov 15, 2011 by SentineL
-2

Try changing:

cell.textLabel.text = [collections objectAtIndex: [indexPath row]];

to

cell.textLabel.text = [collections objectAtIndex:indexPath.row];
answered on Stack Overflow Nov 15, 2011 by Louie

User contributions licensed under CC BY-SA 3.0