2017-01-31 9 views
0

これまでと同様のNSPredicateを構築しました。IOS/Objective-C:NSPredicateで範囲外エラーが発生しました。

NSString *shortTitleClause = nil; 
    NSString *longTitleClause = nil; 

編集:

追加条項:ここ

'NSRangeException', reason: '-[NSTaggedPointerString characterAtIndex:]: Index 1 out of bounds; string length 1' 

私は述語を構築する方法をされています。しかし、この時間は、それがエラーを生成している

shortTitleClause =[NSString stringWithFormat:@"(shorttitle contains[c] %@)", searchText]; 
longTitleClause =[NSString stringWithFormat:@"(longtitle contains[c] %@)", searchText]; 

//私の実際の述語にはさらに多くの節がありますが、どれほど多くの場合でも同じエラーが発生しています。

NSMutableArray *predArr = [@[] mutableCopy]; 

    if (shortTitleClause.length > 0){ 
     [predArr addObject:shortTitleClause]; 
    } 
    if (longTitleClause.length > 0){ 
     [predArr addObject:longTitleClause]; 
    } 
NSString *predStr = [predArr componentsJoinedByString:@"||"]; 
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:predStr]; 
    searchResults = [theBooks filteredArrayUsingPredicate:resultPredicate]; 

When searching for the letter 'S' the predicate logs as: `(shorttitle contains[c] S)||(longtitle contains[c] S)` 

taggedPointerStringが私に何を指しているかはわかりません。なぜこのエラーが発生しているのか誰にも見えますか?

答えて

1

述部を準備するときには、%@値の代わりにstringWithFormatを使用することはできません。代わりにpredicateWithFormatを使用してください。 componentsJoinedByStringを使用してそれらに参加しないでください - NSCompoundPredicateを使用して複数の述語を結合してください:

関連する問題