2014-01-19 101 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是針對其mutableimmutable版本存在許多對象的方法。在NSArrayNSString,NSData等情況下,在其中一個實例上調用mutableCopy將返回一個mutable版本,其中包含與您調用該方法的原始對象相同的內容。


例如,

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

但是,如果你不爲searchResults想成爲一名NSMutableArray,你應該改變它的聲明:

@property (nonatomic,strong) NSArray *searchResults 

如果您不打算它是可變的,它應該被聲明爲不可變的。


提出的索賠,該警告並不影響您的應用程序的性能,我最好的猜測是正確的解決辦法是從NSMutableArray改變searchResultsNSArray

+0

謝謝......我會按照你的建議和馬丁的建議。 – mvasco

1

filteredArrayUsingPredicate返回不變NSArray, 和你似乎已經宣告searchResultsNSMutableArray

因此,無論

  • 變化searchResults的聲明NSArray,或者
  • 分配給它之前進行mutableCopy

正確的解決方案取決於您是否需要稍後修改searchResults

+0

謝謝,我會根據您的建議更改它。 @MartinR你還會介意看看我的問題http://stackoverflow.com/questions/21209540/uitableview-sections-are-not-ordered-as-expected。 ? – mvasco