Передача значения текстового поля между представлениями iphone - PullRequest
0 голосов
/ 03 апреля 2012

спасибо за помощь новичку.Я пытаюсь использовать значение текстового поля в SecondViewController.xib для настройки строки настроек в WebService.m.Я включил свой код.Когда я выполняю приложение, мой NSLog из WebService выдает мне вывод «Тестовый IP is: (null)» NSLog из SecondViewController.m является значением текстового поля.Как правильно передать strIP на WebService.m?Использование примера кода было бы очень полезно.

SecondViewController.h:

@interface SecondViewController : UIViewController

{
UITextField *ipAdd;

NSString *strIP;

}
@property (nontoxic, retain) IBOutlet UITextField *ipAdd;

@property (nonatomic, retain) NSString *strIP;


-(IBAction)textchanged:(id)sender;

+(SecondViewController*)sharedIP;

SecondViewController.m:

-(IBAction)textchanged:(id)sender
{

strIP = ipAdd.text;
NSLog(@"the string in the text field is: %@", strIP);

}

+(SecondViewController*)sharedIP
{
static SecondViewController *sharedIP = nil;
static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{
    sharedIP = [[SecondViewController  alloc] init];
        });
return sharedIP;
}

WebService.m:

SecondViewController *IP = [SecondViewController sharedIP] ;
NSLog(@"The test IP is:  %@", IP.strIP);

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Если вы хотите изменить значение в блоке, вам нужно использовать спецификатор типа __block для типа переменной (sharedIP), чтобы изменения в блоке влияли на значение вне блока.

Также: каждый раз, когда вы звоните + sharedIP, вы устанавливаете значение static на nil и сбрасываете его только в первый раз.Ваш дизайн кажется немного странным ... Я не уверен, почему вы захотите статический экземпляр контроллера представления, но я не знаю, что вам нужно.Если вам просто нужны постоянные данные, посмотрите NSUserDefaults (что здорово, потому что оно сохраняется после перезапусков).Возможно, лучше создать статический экземпляр контейнера данных, чтобы сохранить строковое значение.

Удачи.

0 голосов
/ 03 апреля 2012
  1. Проверьте делегат вашего textField, который должен быть вашим SecondViewController.
  2. Попробуйте напечатать то же значение, прежде чем вернуться. например :

    + (SecondViewController *) sharedIP { static SecondViewController * sharedIP = nil; static dispatch_once_t OnceToken;

    dispatch_once(&onceToken, ^{
    sharedIP = [[SecondViewController  alloc] init];
    });
    
    **NSLog(@"The test IP is:  %@", sharedIP.strIP);**
    
    return sharedIP;
    

    }

Могу помочь

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...