Два предложений дружище :)
- Если вы объявили свойство с именем творящими (которые вы должны иметь в предположении, от вашей геттерной декларации :)) возвестят должен быть типа NSArray, а не id :)
2.Используйте свой приемник для тех, кто возвращает массив, а не id :). Не имеет никакого смысла возвращать массив и объявить тип возвращаемого значения в качестве идентификатора, а затем окончательное повторного приведения его в массив, чтобы получить доступ к его сущности, используя подстрочный синтаксис :)
Проблема в коде
_doers является instance variable :) self.doers является свойством :)
Когда вы синхронизируете свое свойство с помощью @synchronize (теперь вы больше не пишете его, поскольку xcode записывает один для вас по умолчанию) переменные экземпляра, имеющие одно и то же имя как свойство но подчеркивание, префиксное к нему, используется для предоставления установщика по умолчанию и геттера для вашего свойства :)
При вызове _doers вы будете работать с переменной экземпляра, а не свойство, так что ваш добытчик никогда не будет называться :)
Как решить ??
вместо вызова обратного вызова _doers[row];
self.doers[row]
Будет ли решить эту проблему ??
Nope :). Он возвращает массив объектов объекта пользователя :) не массив строк :) Так что, если вы просто скажете self.doers[row]
, вы вернете объект пользователя (словарь в вашем случае) методу, который принимает строку :)
Каков правильный путь?
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
{
User *userInstance = (User *)self.doers[row];
return userInstance.name; //user entiy attribute which holds name or something like that
}
ИЛИ
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
{
return [self.doers[row] valueForKey:@"name"] //user entiy attribute which holds name or something like that
}
он будет работать :) хотя очень плохая модель использования поглотителя для свойства :)
Является ли это правильный подход ??
Будет ли это работать? Конечно! ...это правильный способ сделать это? Ни за что! :)
Для каждой строки в вашей палитре этот метод вызывается, потому что вы обращаетесь к собственности self.doers его геттер вызывается для каждой ячейки :) а значит, вы будете запрашивать так много раз ваш основной информации :)
I думаю, что его не-надо :) Что вы можете сделать, а это пользователь NSFetchedResultsController
переменной singletone выполняет выборку один раз в viewdidload или viewwillappear согласно вашему требованию и использовать его feched массива объектов для сборщика :)
еще
переместите код в getter doers на метод, вызовите его один раз и заполните ваше имущество и один раз после заполнения использовать свойство для заполнения сборщика :)
операции CoreData являются дорогостоящими :)
Во всяком случае счастливым кодирование, все самое лучшее :)
чтеца: кодекс предусматривает выше только для объяснения понятий, а не с целью копирования пасты :) проверьте синтаксис перед тем, как использовать его вслепую :)
Обновите свой вопрос с информацией о фактических ошибках. – rmaddy