2010-11-01 151 views
1

我只是在學習Objective-C,並且有一個我敢肯定的是一個非常基本的問題。 這是我創建的一個函數,它將簡單地保存某些用戶輸入的變量。從函數到函數傳遞變量

- (void)standardDatabaseWithName:(NSString*)name 
          host:(NSString*)host 
         username:(NSString*)username 
         password:(NSString*)password 
         database:(NSString*)database 
          port:(NSInteger*)port { 

    NSString *myName = name; 
    NSString *myHost = host; 
    NSString *myUsername = username; 
    NSString *myPassword = password; 
    NSString *myDatabase = database; 
    NSInteger *myPort = port; 
} 

下面是一個單獨的函數,我想創建一個新的var與該信息,並從那裏使用它是我所需要的。

- (void)insertStandardConnection { 
    NSString name = [NewDbModalView standardDatabaseWithName:myName]; 
    NSString host = [NewDbModalView standardDatabaseWithName:myHost]; 
} 

所以這次嘗試對我來說並不奏效。這裏有任何建議傢伙?在這一點上,我一直在抓我的頭。

回答

2

我建議創建一個對象來保存所有這些信息,只是繞過

0

每次調用該方法時,該對象,你必須提供所有的變量:

[NewDbModalView standardDatabaseWithName:myName host:myHost username:aUsername password:aPassword database:aDatabase port:aPort]; 

所以,當您撥打[NewDbModalView standardDatabaseWithName:myName]時,該方法不存在。

+0

嘿,謝謝,這是有道理的。所以我希望我的方法能夠工作的原因是因爲我需要在某些時候只針對這些變種之一。所以說我已經完成了你的建議,只需要使用用戶名就可以了。我如何瞄準? – 2010-11-01 17:55:14

+0

您可以創建方法來完成其中的每一個。所以如果您只需要更改密碼,請創建一個'-setPassword:'方法。 – 2010-11-01 18:11:54

0

您在standardDatabaseWithName:...中聲明的變量對於該方法而言是本地的。您需要將該數據(副本)存儲在對象中。雖然,看着你的代碼,我想知道你是否在設置默認值?在這種情況下,您可能需要使用靜態全局變量來獲取值,然後您需要-(void)standardDatabaseWithName:...變爲+(void)setStandardDatabaseName:(NSString *)name ...

0

在您的.H文件,你需要合成的屬性,你應該聲明屬性

@interface standardDatabaseWithNameObject : NSObject{ 
    NSString *myName; 
    NSString *myHost; 
    NSString *myUsername ; 
    NSString *myPassword; 
    NSString *myDatabase; 
    NSInteger *myPort; 
    } 

    @property (nonatomic, retain) NSString *myName; 
    @property (nonatomic, retain) NSString *myHost; 
    @property (nonatomic, retain) NSString *myUsername ; 
    @property (nonatomic, retain) NSString *myPassword; 
    @property (nonatomic, retain) NSString *myDatabase; 
    @property (nonatomic, retain) NSInteger *myPort; 
etc... 

然後在你的實現,他們將可以使用:

@synthesize myName, myHost, myUsername, myPassword, myDatabase, myPort; 


- (void)standardDatabaseWithName:(NSString*)name 
          host:(NSString*)host 
         username:(NSString*)username 
         password:(NSString*)password 
         database:(NSString*)database 
          port:(NSInteger*)port { 

    myName = name; 
    myHost = host; 
    myUsername = username; 
    myPassword = password; 
    myDatabase = database; 
    myPort = port; 
} 

- (void)insertStandardConnection { 
    NSString name = myName; 
    NSString host = myHost; 
} 

- (void) dealloc 
{ 
[myName release]; 
[myHost release]; 
[myUsername release]; 
[myPassword release]; 
[myDatabase release]; 
[myPort release]; 

} 

好運

+0

嘿,非常感謝。你已經做得非常清晰。所以當傳遞這個數量或信息時。創建一個單獨的對象可能總是比較乾淨的,對嗎? – 2010-11-01 18:14:14

+2

所有這些都需要self.myName等,否則上面的代碼將不會遵循保留/發佈規則... – bbum 2010-11-01 18:27:40

+1

Shane,根據您需要的數據,您應該將其存儲在特定級別。如果你只需要它在一個函數中,然後在函數中聲明它。如果您在對象中需要它,則將其聲明爲屬性。如果你需要全球化,那麼在全球範圍內宣佈。 - 另外bbum是對的,你想在某些時候釋放你的變量,以免造成內存泄漏。 – 2010-11-01 18:55:48