NSCFString objectAtIndex нераспознанный селектор отправлен в экземпляр 0x5d52d70 - PullRequest
2 голосов
/ 03 июля 2010

Я новичок в разработке для iPhone, и мне было трудно понять, почему мой стол не работает. Это может быть что-то с Core Data, я не уверен. Метод viewDidLoad отлично работает в начале, но когда я пытаюсь прокрутить табличное представление, когда появляется следующая строка, я получаю ошибку:

NSInvalidArgumentException ', причина:' - [NSCFString objectAtIndex:]: нераспознанный селектор, отправленный экземпляру 0x5d52d70 '

my View Controller.h:

#import <UIKit/UIKit.h>
#define kTableViewRowHeight 66

@interface RostersViewController : UIViewController 
<UITableViewDelegate, UITableViewDataSource> {

NSArray *objects;
}
@property(nonatomic,retain) NSArray *objects;
@end

my View Controller.m:

#import "RostersViewController.h"
#import "CogoAppDelegate.h"
#import "TeamCell.h"

@implementation RostersViewController
@synthesize objects;

- (void)viewDidLoad {
CogoAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Teams"                                            inManagedObjectContext:context];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];

NSError *error;

objects = [context executeFetchRequest:request error:&error];

if (objects == nil)
{
    NSLog(@"There was an error!");
    // Do whatever error handling is appropriate
}   
[request release];

UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] addObserver:self
                                        selector:@selector(applicationWillTerminate:)
                                        name:UIApplicationWillTerminateNotification 
                                        object:app];
}

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

// Release any cached data, images, etc that aren't in use.
}

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


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


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [objects count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"cell"];
id currObj = [objects objectAtIndex:indexPath.row];
cell.textLabel.text = [currObj valueForKey:@"name"];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return kTableViewRowHeight;
}
@end

Спасибо за любую помощь. Это очень ценится.

1 Ответ

5 голосов
/ 03 июля 2010

В viewDidLoad изменить objects = [context executeFetchRequest:request error:&error]; на self.objects = [context executeFetchRequest:request error:&error];

executeFetchRequest возвращает автоматически выпущенный объект, который вы затем сохраняете непосредственно в ivar, что позднее превращается в указатель мусора. Что в итоге и указывает на строку.

Использование self.objects позволяет использовать синтезированный сеттер и сохраняет его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...