Сначала вы инициализировать массив переменной
NSMutableArray * array = [[NSMutableArray alloc] init];
И правильно в этой точке, вы должны освободить эту переменную в какой-то момент. Но, когда вы пишете
array= [[dbSingleton sharedInstance] getAll_Players];
Вы перезаписать переменную массива вы только выделенные, и массив теперь не то, что вы должны выпустить здесь, если вы не вызовете сохранить в массиве вы получите от getAll_Players.
Чтобы устранить эту проблему, вы должны сделать это следующим образом:
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSMutableArray * array = [[dbSingleton sharedInstance] getAll_Players];
NSMutableDictionary * dict = [array objectAtIndex:row];
NSString * autoID = [dict objectForKey:@"autoId"];
NSLog(@"%@",[NSString stringWithFormat:@"%@ %@",[dict valueForKey:@"fName"],[dict valueForKey:@"lName"]]);
}
EDIT: (В ответ на вопрос в комментарии)
NSMutableArray * array = [[dbSingleton sharedInstance] getAll_Players];
выше строка просто устанавливает «массив переменной 'как указатель на что угодно' [[dbSingleton sharedInstance] getAll_Players] 'возвращается. Счетчик ссылок не увеличивается и не уменьшается в этой строке, и поэтому вы не должны его уменьшать. (И НИКОГДА не доверяйте значению отсчета сохранения для любого объекта, поскольку объекты не всегда выпускаются, когда вы их ожидаете).
Счетчик ссылок увеличивается только при вызове Alloc, новый, скопировать и mutableCopy при создании объекта и вызова сохранить, и объект, и только тогда, когда вы сами использовали эти ключевые слова, если вы когда-либо выпускаете или автоматически проверяете объект. Обратите внимание, что эти ключевые слова увеличивают счетчик RF. Где выпуск и автореферат Уменьшение количества RF.
Ожидается, что объективная практика должна гарантировать, что любая функция, возвращающая объект, возвращает объект с сохраненным числом 0, если только имя функции не имеет одного из указанных выше ключевых слов в его имени. (и вы должны, конечно, называть «autorelease», а не «освобождать» на объекте, прежде чем возвращать его).
При использовании одного из этих ключевых слов приемник должен ожидать, что счетчик RF равен 1, и что приемник будет обязательно освободите объект, когда он или она с ним закончится.
Это то, что вы можете ожидать от любых встроенных функций. Вот почему вы не должны выпускать «массив» объекта из приведенной выше строки.
Нет необходимости выделять-init и выделять здесь массив, поскольку вам требуется только ссылка на ваш массив sharedInstance. Удалите эти строки и разделите только свой массив: NSMutableArray * array = [[dbSingleton sharedInstance] getAll_Players]; – Mrunal
, что может быть из-за проекта ARC, поэтому вам не нужно выпускать массив, он будет автоматически выпущен –
@Mrunal Вот и ответ прямо там. Должен быть ответ, а не комментарий. –