как использовать valueforkey как будто параметр оператора - PullRequest
0 голосов
/ 19 октября 2011

В настоящее время я анализирую группу xml, которая выглядит примерно так

<Rows>
<Row ID="76" MANUFACTURER="DIB" ISTENT="F"/>
<Row ID="38" MANUFACTURER="HIB" ISTENT="T"/>
<Rows>

Мне интересно, как я мог бы использовать ISTENT в операторе if, чтобы получить только те значения, которые являются истинными .. илипотому что эти значения по-прежнему являются строками, а не логическими значениями = @ "T" или что-то в этом духе ..

это то, что у меня есть до сих пор ... но его нет рядом с правом ... Я надеюсь, что этодам вам представление о том, что я пытаюсь.

if ([arrayData valueForKey:@"ISTENT"] == @"T") {

    then pass my values over to custom method here.

}

Но ничего не возвращается ...

Ответы [ 3 ]

1 голос
/ 19 октября 2011

Почти верно. Вы должны использовать этот метод для сравнения строк в target-c:

if ([[arrayData valueForKey:@"ISTENT"] isEqualToString:@"T"]) {
 //code here
}

Согласно Ссылка на класс яблок на NSString:

  • (BOOL) isEqualToString: (NSString *) aString

Возвращает логическое значение, которое указывает, равна ли данная строка получателю, используя буквальное сравнение на основе Unicode.

1 голос
/ 19 октября 2011

Использование == в NSStrings будет сравнивать только адрес памяти, а не символы в строке.Используйте isEqualToString для сравнения NSStrings

[[arrayData valueForKey:@"ISTENT"] isEqualToString:@"T"];

Обратите внимание, что решение учитывает регистр.

Что касается логического значения, оно зависит от того, достаточно ли умен ваш синтаксический анализатор XML для правильной сортировки данных.Какой XML-парсер вы используете?

1 голос
/ 19 октября 2011

Во-первых, вы не должны сравнивать строки с ==.Вместо этого используйте метод isEqualToString:.

Во-вторых, я предполагаю, что вы уже успешно проанализировали свои данные XML и у вас есть массив словарей, содержащих атрибуты каждой строки.

В-третьих, выне сравнивая строки, так как [arrayData valueForKey:@"ISTENT"] вернет массив, содержащий значения ключей ISTENT, которые, очевидно, вы не можете сравнить со строкой напрямую.

Затем вы можете отфильтровать исходный массив следующим образом:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"ISTENT",@"T"];
NSArray *filteredArray = [arrayData filteredArrayUsingPredicate:predicate];

Полученный массив будет содержать только те строки, где ISTENT равен T, что, я думаю, то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...