3

これはここではかなり基本的な質問です。NSPredicateの基本は理解していると思いますが、ここでエラーが発生する理由についてはまだ少し困惑しています(searchTextは、に渡されるNSStringオブジェクトへのポインターです。方法)。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[cd] %@", searchText];
_searchResults = [_personArray filteredArrayUsingPredicate:predicate];

nameプロパティを持つカスタムオブジェクト(Personオブジェクトなど)のNSMutableArrayがあります。私がやろうとしているのは、ユーザーがUISearchBarに入力し始めたときに、NSPredicateを使用して潜在的な一致をフィルタリングすることだけです。IBコンポーネントは十分に単純で、正常に機能しているように見えます。ただし、検索してフィルタリングを開始しようとすると、基本的なアプリケーションがクラッシュし、次のエラーが発生します。

'NSInvalidArgumentException', reason: '-[xPerson isEqualToString:]: unrecognized selector sent to instance 0x8043340'

私の理解では、述語はNSMutableArrayの各オブジェクトに渡され、述語のSELFキーワードはそれぞれのオブジェクトを参照し(この場合は実際には必要ないと思います)、.nameはカスタムオブジェクトで合成されたプロパティを使用できます。このエラーは、-isEqualToString:呼び出しが、オブジェクトのプロパティではなく、カスタムオブジェクトで呼び出されていることを示しているようです。

私が間違っていることについての提案は非常にありがたいです。

4

2 に答える 2

5

このようにしてみて、

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText];
_searchResults = [_personArray filteredArrayUsingPredicate:predicate];
于 2012-10-13T05:16:25.930 に答える
0

私も同じ問題を抱えていました。エラーはプレシケートではなく、テーブル ビューのセルにありました。私はこのようにセルを設定していました:

cell.textLabel.text = [self.searchResults objectAtIndex:indexPath.row];

オブジェクトを解析するのを忘れていました。次に、コードを次のように変更しました。

cell.textLabel.text = ((Product*)[self.searchResults objectAtIndex:indexPath.row]).name;

したがって、おそらくあなたのエラーは NSPredicate にもありません。

于 2013-03-03T07:07:41.287 に答える