iOS NSP предикат не работает? - PullRequest
1 голос
/ 14 февраля 2012

У меня есть простая функция предиката, которая выглядит следующим образом:

[totalSentences addObjectsFromArray:[firstLangEx filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF contains[c] %@)", cellText]]];

Эта строка работает в одном из моих приложений, однако она не работает, когда я скопировал это в другое приложение и попытался протестировать это.

totalSentences is a global NSMutableArray

firstLangEx is a local NSArray filled with several lines

cellText is  NSString *cellText = cell.textLabel.text;

Все эти коды существуют в моем оригинальном приложении и работают.Они реализованы в методе - (void)tableView:(UITableView *)tableView1 didSelectRowAtIndexPath:(NSIndexPath *)indexPath

Даже cellText соответствует одной строке в firstLangEx в другом приложении, totalSentences никогда не заполняется никакими символами.

Что может вызвать это?


РЕДАКТИРОВАНИЕ:

В NSLog

totalSentences всегда не показывает содержимого, в отличие от вывода в исходном приложении, которое всегда показывает хотя бы одну строку.

firstLangEx всегда имеет правильный контент, загруженный из текстового файла (в обоих приложениях файлы одинаковы)

cellText всегда показывает хотя бы одну строку.(Я тестирую одинаковые строки в обоих приложениях.)

Поэтому я понятия не имею, почему totalSentences всегда пуст, когда он должен быть заполнен хотя бы одной строкой, которая соответствует всем строкам cellText.


EDIT:

Я также добавил несколько строк в totalSentences программно, и изменяемый массив работает хорошо.Любая идея, почему это происходит?


РЕДАКТИРОВАТЬ:

Я проверил, как предложил Юджи:

BOOL ok;

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", cellText];

ok = [predicate evaluateWithObject: firstLangEx];

NSLog (@"Bool ok %d", ok);

Результат всегда "Bool ok 0".

cellText был "вавилонским", и одна строка из firstLangEx содержит это: "[E: Как древний вавилонянин мог написать это.]".

Так, что я сделал неправильно?


РЕДАКТИРОВАТЬ:

Я использую этот код

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *cellText = cell.textLabel.text;

в

- (void)tableView:(UITableView *)tableView1 didSelectRowAtIndexPath:(NSIndexPath *)indexPath

, чтобы извлечь строку, чтобы соответствовать строкеиз моего массива.

Однако, он никогда не сопоставляется, так как

NSLog (@"cellText length %d", [cellText length]);

всегда показывает, что в cellText всегда есть один дополнительный символ, даже если в моем массиве нет пробела или дополнительного символа, которыймой вид таблицы загружен из.Например, «вавилонский» - это 10 символов, и в журнале эта сумма была указана в исходном приложении, но в другом приложении было показано 11 символов, даже в обоих приложениях для просмотра таблицы используются одни и те же файлы.

Почему это происходит

1 Ответ

0 голосов
/ 17 февраля 2012

Поскольку на мой вопрос нет ответа, я отвечу, поскольку нашел решение.Было бы хорошо, если бы Юджи был награжден за его вклад.

Я решил это, скопировав содержимое файлов, представляющих табличное представление, в новые файлы с другими именами, и внезапно лишний невидимый символ для всех ячеек исчез,Это общая проблема?Во всяком случае, это решено сейчас, ура!Спасибо Юджи.

...