2013-09-07 2 views
1

У меня есть приложение iOS, которое извлекает данные с сервера и сохраняет его с помощью CoreData. У меня есть UITableView, который я пытаюсь заполнить только выделенными частями от данного атрибута данных ядра.данные не записываются в NSMutableArray

Перед заполнением таблицы я просматриваю данные и передаю то, что хочу, в NSMutableArray. Проблема в том, что когда я нахожу элемент, я хочу, чтобы он не добавлялся в массив.

Я объявляю массив в моем .h файл как так ...

@property (strong, nonatomic) NSMutableArray *theNewSource; 

и обобщать его в .m файле

@synthesize theNewSource = _theNewSource; 

Вот метод ...

-(NSMutableArray *)setDataSourceArray 
{ 

    for(int i = 0; i < rcount ; i++) 
    { 
     NSIndexPath *countingInteger = [NSIndexPath indexPathForItem:i inSection:0]; 
     NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:countingInteger]; 
     NSString *action = [object valueForKey:@"theActionName"]; 

     if (![action isEqual:@"Login"]) 
     {    
      [_theNewSource addObject:action]; 
     } 
    } 
    NSLog(@"the array is now %@",_theNewSource); 
    return _theNewSource; 

} 

Я установил точку останова в строке [_theNewSource addObject:action]. Я могу видеть на консоли, что переменная action имеет значение, но она никогда не добавляется в массив _theNewSource ... Я уверен, что это Objective C 101, но я не могу понять. Пожалуйста помоги!

+0

В стороне - это кажется большой работой, когда вы можете установить это как предикат в запросе на выборку NSFetchedResultsController. – Abizern

+0

Abizern, я просмотрел некоторые из документации CoreData, потому что думал, что есть способ сделать это с помощью запроса на выборку, но я пропустил предикат. Jsdodgers исправил мою проблему, но я хотел бы избежать этого метода, если бы мог. Не могли бы вы указать мне пример использования предиката. Атрибут CoreData, из которого я выхожу, - это «theActionName», как вы можете видеть. Когда я извлекаю данные из атрибута, я просто хочу исключить действия «Вход», которые могут использовать предикат? – Ben

+2

Дубликат около 100 других. Должен создать массив. –

ответ

1

Вы даже создали свой массив _theNewSource? Похоже, вы еще не сделали следующее:

_theNewSource = [[NSMutableArray alloc] init]; 

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

+0

Ничего себе это смущает! Я попробовал это один раз, но я отформатировал его неправильно. Я пытался его создать с помощью 'NSMutableArray * _theNewSource', но он дал мне ошибку, поэтому я удалил ее! Это был трюк благодаря Jsdodgers! – Ben

+1

@Ben - Обратите внимание, что вы должны сделать это в 'init'. –

1

Вы должны использовать предикат в NSFetchedResultsController в fetchRequest непосредственно:

[NSPredicate predicateWithFormat:@"theActionName != %@", @"Login"]; 

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

Выполнение этого способа означает, что вы можете использовать NSFetchedResultsController непосредственно в качестве источника данных для своей таблицы, а не использовать его для создания фильтрованного массива, который будет действовать как источник данных.

+0

Abizern это то, что я искал все время. Я реализовал это и теперь использую его. Это намного проще, чем создание нового массива. Я задал еще один вопрос о том, как фильтровать данные по мере заполнения таблицы и получать несколько предложений для создания отдельного массива и использовать это как источник данных. Это гораздо лучший способ удовлетворить мои потребности, на мой взгляд! Благодаря! – Ben

+0

Я рад, что это помогло. Именно поэтому я предпочитаю решать настоящую проблему, а не просто отвечать на вопрос напрямую. – Abizern

Смежные вопросы