объект вылетает приложение - PullRequest
0 голосов
/ 13 февраля 2010

я получил NSArray, который заполняется в методе init моего UITableViewController.

Я использую этот объект в "didSelectRowAtIndexPath" для передачи другого контроллера tableview.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
ablogSingleCatTableViewController *singleCatTableViewController = [[ablogSingleCatTableViewController alloc] initWithStyle:UITableViewStylePlain category:[categories objectAtIndex:indexPath.row]];
[[self navigationController] pushViewController:singleCatTableViewController animated:YES];
[singleCatTableViewController release];
 }

это работает несколько раз, когда я запускаю свое приложение. после выбора строки и возврата к главному контроллеру uitableview в произвольной точке мое приложение вылетает после выбора строки.

с некоторыми nslogs я обнаружил, что он падает, если я пытаюсь использовать мой объект "category".

так

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

NSLog(@"before");
NSLog(@"cats: %@", categories);
NSLog(@"after");

ablogSingleCatTableViewController *singleCatTableViewController = [[ablogSingleCatTableViewController alloc] initWithStyle:UITableViewStylePlain category:[categories objectAtIndex:indexPath.row]];
[[self navigationController] pushViewController:singleCatTableViewController animated:YES];
[singleCatTableViewController release];

 }

с этим кодом мое приложение падает после «до» ... «после» никогда не появляется. я не знаю, почему мой объект "категории" сбивает мое приложение?!

мой объект категорий определен в моем заголовочном файле и имеет @property (nonatomic, retain). я синтезирую и выпускаю его в моем методе dealloc.

У кого-нибудь есть идея?

// редактировать:

некоторые подробности здесь, из-за комментариев:

Консоль отладчика говорит: «Программа получила сигнал:« EXC_BAD_ACCESS ».

Я создаю массив категорий следующим образом:

- (void)initCategories {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Categories" ofType:@"plist"];
[self setCategories:[[NSArray alloc] initWithContentsOfFile:path]];
  }

вызов этого метода в моем методе initwithstyle

[self initCategories];

мой другой пользовательский метод инициализации выглядит примерно так:

- (id)initWithStyle:(UITableViewStyle)style category:(NSDictionary*)cat {
if (self = [super initWithStyle:style]) {
    currentCategory = cat;

    items = [[NSMutableArray alloc] init];

    self.title = [currentCategory objectForKey:@"TITLE"];
    //XLog("%@", currentCategory);
}
return self;
}

Ответы [ 2 ]

1 голос
/ 14 февраля 2010

хорошо, во-первых,

[self setCategories:[[NSArray alloc] initWithContentsOfFile:path]];

у вас есть утечка здесь. просто используйте

categories = [[NSArray alloc]  initWithContentsOfFile:path];

Здесь происходит сбой;

currentCategory = cat;

Вы должны сохранить, использовать;

currentCategory = [cat retain];

Это проблемы, которые я вижу в опубликованном коде, если у вас нет ошибок в остальной части программы, все будет хорошо с этими исправлениями.

1 голос
/ 13 февраля 2010

Если вы создаете свой массив примерно так:

NSArray *tmpArray = [[NSArray alloc] initWithBlah ...];

Убедитесь, что вы присвоили его с помощью синтезированного геттера, используя этот код:

self.categories = tmpArray;
[tmpArray release];

Если вы делаете:

categories = tmpArray;
[tmpArray release];

переменная экземпляра не будет сохранена вообще.

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