2013-02-16 172 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; 
} 

返回值看起來像這樣 (「鍵: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年2月16日14:46:52.222 [3334:907] - [__ NSCFString計數]:無法識別的選擇發送到實例0x210b6e20

- [__ NSCFString objectAtIndex:]:無法識別的選擇發送到實例0x1c5e7a70

任何幫助將不勝感激。

謝謝。

+0

在for循環中,'value'是一個'NSString'。顯示for循環如何獲取它的值,即getAnswerValueInArray方法和for循環之間的連接。 – zaph 2013-02-16 04:14:59

+0

嗨Zaph, 感謝您的回覆。我使用這樣的東西。 NSArray * selectedAnswer = [qtn.getAnswer getAnswerValueInArray];如果(selectedAnser!= nil){(for int a = 0; a eatToCode 2013-02-16 04:23:50

回答

0

你不處理數組,你正在處理一個字符串。 Objective-C稍微有一些缺點,因爲對象是無類型的,但指針是鍵入的。僅僅將一個對象分配給一個指針不會改變它的類型或其他任何關於它的地方(保留數量)。

在我看來,你不希望你的字符串有什麼語法,因此你期望解析是爲什麼內置的,所以我真的不能說更多。

+0

您好湯米,在這種情況下,我是否必須手動分解字符串以獲取其中的項目? – eatToCode 2013-02-16 04:29:19

+0

要回答湯米,是的。如果您希望數組中的多個項來自同一個字符串,則需要手動分解字符串。你可以使用:'value = [NSArray arrayWithObjects:string1,string2,string3 ...,nil];' – lnafziger 2013-02-16 04:35:49

0

在嘗試訪問其中的組件之前,您需要解析字符串以創建數組。一種開始的方法是使用NSString方法componentsSeparatedByString:componentsSeparatedByCharactersInSet:。這些方法每個都會返回一個由接收器生成的字符串數組,通過將其拆分爲指定的一個或多個字符。

+0

謝謝。這也有幫助。 – eatToCode 2013-02-16 05:09:54