2014-01-19 5 views
0

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

Предупреждение: Incompatible pointer types assigning to 'NSMutableArray *' from 'NSArray *' при определении метода.

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope { 
    self.searchResults = [[self.fetchedResultsController fetchedObjects] filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) 
    { 
    ToDoItem * item = evaluatedObject; 
    NSString* name = item.todoName; 

    //searchText having length < 3 should not be considered 
    if (!!searchText && [searchText length] < 3) { 
     return YES; 
    } 

    if ([scope isEqualToString:@"All"] || [name isEqualToString:scope]) { 
     return ([name rangeOfString:searchText].location != NSNotFound); 
    } 
    return NO; //if nothing matches 
}]]; 
} 
+0

Является ли 'searchResults' NSMutableArray? – John

+0

Что такое '!! searchText' ...? – nhgrif

+0

это текст, поступающий с контроллера панели поиска – mvasco

ответ

1
self.searchResults = [[[self.fetchedResultsController fetchedObjects] 
    filteredArrayUsingPredicate:[NSPredicate predicateWithBlock: 
    ^BOOL(id evaluatedObject, NSDictionary *bindings) mutableCopy]; 

mutableCopy является метод на многих объектах, для которых mutable и immutable версия существует. В случае таких вещей, как NSArray, NSString, NSData и т. Д., Вызов mutableCopy в одном из этих экземпляров вернет версию mutable, содержащую то же содержимое, что и исходный объект, на который вы вызвали метод.


Например,

NSArray *immutableArray = [NSArray arrayWithObjects:@"foo",@"bar"]; 
NSMutableArray *mutableArray = [immutableArray mutableCopy]; 

Однако, если вы не добиваетесь searchResults быть NSMutableArray, вы должны изменить это заявление:

@property (nonatomic,strong) NSArray *searchResults 

Если вы не предполагайте, что он изменен, он должен быть объявлен неизменным.


Учитывая ваше заявление о том, что предупреждение не влияющими на производительность вашего приложения, моя догадка, что правильное решение будет меняться searchResults от NSMutableArray к NSArray.

+0

Спасибо ... Я последую за вашим предложением, а также от Мартина. – mvasco

1

filteredArrayUsingPredicate возвращает неизменныNSArray, и вы, кажется, объявили searchResults в NSMutableArray.

Так как изменение

  • декларация searchResults к NSArray или
  • сделать mutableCopy перед назначением его.

Правильное решение зависит от того, нужно ли вам позже изменить номер searchResults.

+0

Спасибо, я изменю его после ваших предложений. @MartinR вы тоже не могли бы взглянуть на мой вопрос http://stackoverflow.com/questions/21209540/uitableview-sections-are-not-ordered-as-expected. ? – mvasco

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