2017-01-31 5 views
0

Я создал NSPredicate, подобный тому, что был ниже, и он отлично работал. Тем не менее, на этот раз, он генерирует ошибку:IOS/Objective-C: ошибка вне диапазона с NSPredicate

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

Вот как я построить предикат:

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

Edit:

Добавление статей:

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 для объединения нескольких предикатов:

shortTitlePredicate = [NSPredicate predicateWithFormat:@"(shorttitle contains[c] %@)", searchText]; 
longTitlePredicate = [NSPredicate predicateWithFormat:@"(longtitle contains[c] %@)", searchText]; 

NSPredicate *resultPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[shortTitlePredicate,longTitlePredicate]]; 

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

  • Нет связанных вопросов^_^