2013-05-26 34 views
-2

我剛開始學習ObjectiveC,我遇到了一個問題。如何在ObjectiveC中使用變量的值?

我在for循環中有一個變量,在任何迭代中這個變量的變化值,我想要他的價值。

這裏我的問題的變量是「名」:

爲第一次重複的名字=「ID」 爲第二迭代名稱=「城市」 ......

for (i = 0; i < count; i++) { 
name = ivar_getName(ivars[i]); 
encode = ivar_getTypeEncoding(ivars[i]); 
type = decode_type_string(encode); 
if (strncmp(encode, "@", 1) == 0) 
{ 
printf(" '%s', ", [[obj name*]UTF8String]); 
} 
else 
{ 
printf(" %s ", name); 
} 
} 

我的目標是,變量由其值來解釋。如果在我的iiteration變量名稱設置爲「ID」,我想要:[obj name] => [id obj](用於我的實例的id)如果在我的iiteration變量名稱設置爲「City」有:OBJ名稱] => [OBJ市(全市我的實例) (對不起,我的英語)

+1

什麼是你想辦?? 「使用」意味着什麼?你可以顯示for循環的代碼 –

+0

我給一個函數提供一個對象,這個函數給了我存儲在「name」變量(for循環)中的所有屬性,以及它們存儲在另一個變量中的類型(INTROSPECTION) 這裏obj是一個對象我想用getter/setter來打印每個屬性的值。 [obj name] – user2421041

+0

你能展示更多的代碼嗎? –

回答

0

如果要打印一個Objective-C的字符串,使用NSLog

NSLog(@" %@ ", [obj name]); 
0

要在objective-c中打印字符串,可以使用NSLog。電話看起來像

NSLog(@"%@",[obj name]); 
+0

Thk,但它不是目的:) – user2421041

0

不知道我挺讀你的問題 - 但我認爲你想要動態獲取它們。

查看下面的示例。

Dw。

#import <Foundation/Foundation.h> 
#import <objc/runtime.h> 

@interface Frob : NSObject; 
@property (strong) NSString * name, * bar, * fred; 
@end 
@implementation Frob 
@end 

int main(int argc, const char * argv[]) 
{ 
    @autoreleasepool { 
     Frob * frob = [[Frob alloc] init]; 
     frob.name = @"aName value"; 
     frob.bar = @"aBar value"; 
     frob.fred = @"aFred value"; 

     const char *lst[] = { "name", "bar", "fred" }; 
     for(int i = 0; i < sizeof(lst)/sizeof(char*); i++) 
     { 
      const char * nameStr = lst[i]; 

      SEL s = sel_getUid(nameStr); 
      if (s) { 
       NSString * val = [frob performSelector:s]; 
       NSLog(@"%s --> %@\n", nameStr, val); 
       printf("%s --> %s", nameStr, [val UTF8String]); 
      } 
     } 
    } 
    return 0; 
} 
2

我覺得你對幾件事情感到非常困惑。首先,NSString對象不以字符串的第一個字符「@」開頭。相反,「@」字符用於區分C字符串文字(例如「abc」)和Objective-C NSString文字(例如@「abc」)。請注意,「@」字符不在引號內。

其次,如果你有一個名爲屬性的對象「名」,你可以參考它與任何[myObj name]myObj.name價值,並且用[myObj setName:newValue];myObj.name = newValue;設置。

如果您有希望打印用於診斷目的的NSString對象,則可以使用NSLog(@"Here is the string ->%@", theString);進行打印。 %@是一個特殊的Objective-C格式代碼,意思是「將下一個格式parm視爲對象並調用它的方法,然後顯示該結果」。

(如果你是「剛開始學習」的Objective-C沒有理由與ivar_getName及其同類被搞混。這樣的函數是很少需要。)

+0

1:在我的if條件中的「@」不用於NSString它是ivar_getTypeEncoding()的返回(如果@返回=>對象) 2:in variable「name 「我通過使用ivar_getName()來設置屬性的名稱在任何迭代中。 我想使用這樣的getter ==> [obj名稱]其中名稱更改值(for循環)。但是這裏的變量名稱沒有被解釋:/ 我的目標是變量被解釋爲它的值。如果在我的iiteration變量名稱設置爲「ID」,我想要:[obj name] => [id obj] ... – user2421041

+0

@ user2421041 - 在編輯它之前,在您的第一個問題中沒有任何明顯的變化。而且,正如我所說,如果你只是「學習」,還有很多更重要的東西需要學習。 –

相關問題