2013-02-16 2 views
0

Я очень новичок в Objective-C, и у меня возникла проблема с NSArray.Преобразование NSString в NSArray

У меня есть класс, который выглядит как этот

@interface Tuple : NSObject 
{ 
    NSObject* dataKey; 
    NSObject* dataValue; 
    NSString* dataType; 
} 
@property(nonatomic, retain) NSObject* dataKey; 
@property(nonatomic, retain) NSObject* dataValue; 
@property(nonatomic, retain) NSString* dataType; 

- (id) initWithKey:(NSObject*)dKey 
      type:(NSString*)dType 
     value:(NSObject*)dValue; 
- (NSString*) description; 

- (NSString*) getValueInString; 
- (BOOL)  getValueInBoolean; 
- (NSString*) getAnswerValueInString; 
- (NSArray*) getAnswerValueInArray; 
@end 

и это мой метод getAnswerValueInArray

- (NSArray*) getAnswerValueInArray 
{ 
    NSLog(@"%@",dataValue); 
    NSArray* value = (NSArray*)dataValue; 
    if ([dataType isEqualToString:@"vague"] == NO) { 
     return value; 
    } 
return nil; 
} 

Возвращаемое значение выглядит следующим образом («KEY: 0 \ tTYPE: строка \ TValue = p1 \ n ',' KEY: 2 \ tTYPE: string \ tVALUE = p4 \ n ')

Но когда я пытаюсь зацикливать массив, некоторые вещь как

for (int a=0; a<value.count; a++) 

Я получаю сообщение об ошибке ниже. Кроме того, я попробовал [value objectAtIndes: 0] и дал мне ту же (String) ошибку. Я предполагаю, что каким-то образом мой массив не является массивом, а строкой и, следовательно, ошибками металирования при использовании методов массива. Но я не понимаю, почему и как я могу исправить это, чтобы получить фактический массив.

2013-02-16 14: 46: 52,222 [3334: 907] - [__ рассчитывать NSCFString]: непризнанные селектор направлен например 0x210b6e20

- [__ NSCFString objectAtIndex]: непризнанные селектор направлен например 0x1c5e7a70

Любая помощь будет принята с благодарностью.

Спасибо.

+0

В цикле for 'значение' является' NSString'. Покажите, как цикл for получает его значение, то есть соединение между методом getAnswerValueInArray и циклом for. – zaph

+0

Hi Zaph, Спасибо за ответ. Я использую что-то вроде этого. NSArray * selectedAnswer = [qtn.getAnswer getAnswerValueInArray]; if (selectedAnser! = nil) {(для int a = 0; a eatToCode

ответ

0

Вы не имеете дело с массивом, вы имеете дело со строкой. Objective-C немного отстает от проторенной дорожки, потому что объекты являются бесчисленными, но набираются указатели. Простое назначение объекта указателю не изменяет его тип или что-то еще (сохраняйте счет в сторону).

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

+0

Привет, Томми, в этом случае мне приходится вручную разбивать строку, чтобы получить элементы внутри нее? – eatToCode

+0

Отвечать за Томми, да. Вам нужно вручную разбить строку, если вы хотите, чтобы в массиве было несколько элементов, которые поступают из одной строки. Вы можете использовать: 'value = [NSArray arrayWithObjects: string1, string2, string3 ..., nil];' – lnafziger

0

Вам нужно будет разобрать строку, чтобы создать массив, прежде чем пытаться получить доступ к компонентам внутри него. Один из способов начать работу - использовать методы NSStringcomponentsSeparatedByString: или componentsSeparatedByCharactersInSet:. Эти методы возвращают массив строк, генерируемых из приемника, путем разбиения его на указанную строку или символы.

+0

Спасибо. Это тоже помогло. – eatToCode

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