ошибка при использовании массива делегатов - PullRequest
2 голосов
/ 27 декабря 2011

Я пытаюсь создать объект "Player" в другом классе, инициализируя массивом объектов "Player", которые есть в моем делегате приложения. Этот код работал (и до сих пор работает) с ios 4.3, но вылетает (SIGABRT или exec_bad_access) с ios 5.0.

Я импортировал делегат приложения.

Вот код, который не работает:

PlaybookAppDelegate *delegate = (PlaybookAppDelegate *)
[[UIApplication sharedApplication] delegate];
Player *thisPlayer = [delegate.players objectAtIndex:index.row];

Вот объявление в моем AppDelegate:

@interface PlaybookAppDelegate : NSObject <UIApplicationDelegate>
{
    NSMutableArray *players;   
}

@property (nonatomic, retain) NSMutableArray *players; 

вот метод, который определяет «индекс»

-(id)initWithIndexPath:(NSIndexPath *)indexPath{
if (self == [super init] ) {
    index = indexPath;
}
return self;
}   

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

indexPath - это объект, а не структура, поэтому он будет освобожден, если вы не станете его владельцем.Вы должны быть в состоянии решить эту проблему следующим образом:

-(id)initWithIndexPath:(NSIndexPath *)indexPath
{
  if( (self == [super init]) ) {
    index = [indexPath retain]; // need to take ownership of this
  }
  return self;
}

- (void)dealloc
{
  // include all your regular -dealloc code
  [index release];
  [super dealloc];
}

Кроме того, с такими проблемами с памятью, это просто совпадение, что вы видите ошибку с iOS 5. Она также не работала под iOS 4Вам просто повезло.

1 голос
/ 27 декабря 2011

Вы где-нибудь инициализировали массив Players?Если вы этого не сделаете, это приведет к плохому доступу.

...