2010-11-01 4 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; 
} 

Ниже отдельная функция, где я хочу, чтобы создать новый вар с этой информацией, и оттуда использовать именно то, что мне нужно.

Так что эта попытка не сработала для меня. Любой совет здесь, ребята? На этом этапе я почесал голову.

ответ

2

Я хотел бы предложить создать объект для хранения всей этой информации и просто передать объект вокруг

0

Каждый раз, когда вы вызываете метод, вы должны предоставить все переменные:

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

Так , когда вы вызываете [NewDbModalView standardDatabaseWithName:myName], этот метод не существует.

+0

Эй, спасибо, что имеет смысл. Поэтому причина, по которой я надеялся, что мой метод будет работать, заключается в том, что в определенный момент мне нужно только нацелиться на один из этих переменных. Поэтому скажите, что я сделал то, что вы предлагаете, и вам нужно только работать с именем пользователя, например. Как я могу настроить таргетинг? –

+0

Вы можете создавать методы для каждого из них. Поэтому, если вам нужно только изменить пароль, сделайте метод '-setPassword:'. –

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]; 

} 

Good Luck

+0

Эй, спасибо большое. Вы сделали это довольно кристально чистым. Поэтому при передаче этой суммы или информации. Вероятно, всегда лучше создавать отдельный объект, правильно? –

+2

Все они должны быть self.myName и т. Д., Или приведенный выше код не будет следовать правилам сохранения/выпуска ... – bbum

+1

Шейн, в зависимости от того, где вам нужны данные, вы должны сохранить его на определенном уровне. Если вам нужна только функция внутри функции, тогда объявите ее в функции. Если вам нужно это в объекте, объявите его как свойство. Если вам нужно глобально, тогда объявите его глобально. - Кроме того, bbum прав, вы хотите в какой-то момент освободить свои переменные, чтобы не создавать утечку памяти. –

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