2011-02-08 55 views
3

我是新的objective-c,這是我的第一篇文章。這是我的問題:將NSString變量傳遞給一個函數並對其進行修改

在我的主文件中我有一個變量:NSString * var; 後來我有一個函數:

-(BOOL) myfunction:(NSString *)myvar { 
myvar = @"OK!"; 
return YES; 
} 

現在在主文件中我做的:

NSString *var; 
BOOL control = myfunction:var; 
if(control) 
    NSLog(@"var is: %@",var); 

但輸出是 「var爲:」。如果我建在調試模式下,把一個斷點的功能的啓動myfunction的MYVAR的內存地址等於爲VAR,但轉讓之後MYVAR的地址是從地址不同var。我該如何解決它?提前致謝!

+0

順便說一下,這是一種方法,而不是一個函數。 – jlehr 2011-02-08 15:51:27

回答

1

語法上你需要修復你的myFunction的調用,像這樣: BOOL control = [self myfunction:var];

真正的問題在這裏的是,myFunction的內部你分配一個字符串值只有一個本地字符串變量,而要改變底層它指向的字符串。 這通常是的OBJ-C錯誤的做法,但你可以做到這一點,像這樣:

-(BOOL)myfunction:(NSString **)myvar 
{ 
    *myvar = @"OK!"; 
    return YES; 
} 

NSString *var; 
BOOL control = [self myfunction:&var]; 
if(control) 
    NSLog(@"var is: %@",var); 
+0

感謝您的答案! – Andrea 2011-02-08 15:15:18

+1

爲了強調,如果您使用*引用參考,您做錯了*。 – bbum 2011-02-08 16:35:40

4

您還可以使用NSMutableString

-(BOOL) myfunction:(NSMutableString *)myvar { 
    [myvar setString:@"OK!"]; 
    return YES; 
} 

和更改您的通話網站如下:

NSMutableString *var = [NSMutableString string]; 
BOOL control = [self myfunction:var]; 
if(control) 
    NSLog(@"var is: %@",var); 
6

雖然目前給出的答案是正確的。我認爲一個更相關的問題是爲什麼你會想要這樣做。

它看起來你想有一個防禦性的編程風格,其中返回代碼表示成功或失敗。

一個比較客觀的-C一樣的方式做這將是傳遞字符串和NSError **作爲參數,並在寫Error Handling Programming Guide

於是方式描述返回字符串或零表示失敗這將是:

- (NSString *)aStringWithError:(NSError **)outError { 
    returnString = @"OK"; 
    if (!returnString) { 
     if (outError != NULL) { 
      NSString *myErrorDomain = @"com.company.app.errors"; 
      NSInteger errNo = 1; 
      *outError = [[[NSError alloc] initWithDomain:myErrorDomain code:errNo userInfo:nil] autorelease]; 
     } 
    } 
    return returnString; 
} 

,並使用它:

NSError *error; 
NSString *stringVariable = [self aStringWithError:&error]; 
if (!stringVariable) { 
    // The function failed, so it returned nil and the error details are in the error variable 
    NSLog(@"Call failed with error: %ld", [error code]); 
} 

這是一個簡單的例子,但你可以看到你可以構建並返回關於錯誤的更有意義的信息,而不僅僅是它是否成功。

相關問題