Как передать значение из UITextField из одного VC в строку в другом VC? - PullRequest
1 голос
/ 07 февраля 2012

Я гуглил по этому поводу и даже пытался искать на многих форумах, также пробовал синглтон и т. Д., Но каждый раз, когда моя вторая строка VC'c возвращает значение NULL.

RETRIEVALTVC - это мой VC, в котором я ожидаю значение, а IRTViewController - мой VC, имеющий TextField.

Я импортировал все файлы заголовков.

Это мой RetrievalTVC

RetrievalTVC.h

#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;

В RetrievalTVC.m, когда я пыталсячитать значение строки, возвращая его NULL

- (void)viewDidLoad{
[self list];
}

- (NSMutableArray *)list{
  NSLog(@"Value of string: %@",string);
}

Это мой IRTViewController

IRTViewConroller.h

@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed

IRTViewController.m

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve = [[RetrievalTVC alloc]init];
retrieve.string = searchTrain.text;
//Here when i used NSLog its returning the value

Пожалуйста, помогите .. Миллионы Спасибо заранее:)

Ответы [ 10 ]

1 голос
/ 24 августа 2012

Прежде всего, создайте свойство nsstring в классе Appdelegate и синтезируйте его. например -

В Appdelegate.h: -

@property(nonatomic,retain)nsstring *objString;

В Appdelegate.m: -

@synthesize objString;

Теперь в ViewController, в который вы вводите строковое значение, выполните следующее: -

-(void)viewdidload
{
   Appdelegate *obj = (Appdelegate *)[[UIApplication sharedApplication]delegate];

obj.objString = Your String;
}

Теперь вы можете получить значение вашей строки в любом желаемом классе контроллера представления.

просто сделать объект "obj", используя тот же код

Appdelegate *obj = (Appdelegate *)[[UIApplication sharedApplication]delegate];

а затем просто сделайте

RetrievingString = obj.objString;

Таким образом, вы можете легко получить строковое значение.

0 голосов
/ 07 февраля 2012

Имена методов могут быть написаны неправильно

Понимание

  • IRTViewController - имеет текстовое поле, это значение необходимо перейти на RETRIEVALTVC.

Случай 1. RETRIEVALTVC имеет объект IRTViewController, Использование делегатов. Случай 2. Когда пользователь нажмет только кнопку, вы создадите RETRIEVALTVC в IRTViewController.

Решение по делу 1:

RetrievalTVC.h

#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;

RetrievalTVC.m

- (void)viewDidLoad{
[self list];
IRTViewController * iRTViewController = [[IRTViewController alloc] init];
iRTViewController.target = self;
}

- (NSMutableArray *)list{
string = [[NSString alloc]init];
 NSLog(@"Value of string: %@",string);
}

IRTViewConroller.h

@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
@property (nonatomic, assign) id target;
-(IBAction)search:(id)sender //Action when Button is Pressed

IRTViewController.m

@synthesize target;

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve =target;
retrieve.string = searchTrain.text;
}

Случай 2: он должен работать с вашим подходом

0 голосов
/ 17 августа 2012

В той же строке кода, которую вы размещаете, новый viewController - это место, где вы должны делать назначения (=).

, т. Е. В VC1, скажем, string = VC1String, а в VC2 - например, string = VC2String.

внутри VC1.m, в той же строке кода, которую вы выделяете VC2 (при условии, что присвоенное имя также является VC2), просто напишите:

VC2.VC2String = VC1String;
0 голосов
/ 07 февраля 2012

Вы должны написать свой код следующим образом.

RetrievalTVC.h

#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
-(IBAction)getValue:(NSString *)val;

В RetrievalTVC.m

- (void)viewDidLoad{
[self list];
}

-(IBAction)getValue:(NSString *)val
{

   string=val;
   NSLog(@"Value of string: %@",string);
}

- (NSMutableArray *)list{
string = [[NSString alloc]init];
 NSLog(@"Value of string: %@",string);
}

IRTViewConroller.h

@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed

IRTViewController.m

-(IBAciton)search:(id)sender{
RetrievalTVC *retriv = [[RetrievalTVC alloc]init];
[retrieve getValue:searchTrain.text];
retrieve.string = searchTrain.text;
0 голосов
/ 07 февраля 2012

используйте @property (nonatomic, strong) NSString *string; вместо @property (nonatomic, copy) NSString *string;

также используйте @property (strong, nonatomic) IBOutlet UITextField *searchTrain; вместо `@property (неделя, неатома) IBOutlet UITextField * searchTrain

Хорошо, я нашел ошибку

не нужно alloc строка в viewDidLoad. что здесь происходит, вы устанавливаете значение в строку, когда push view вызывает viewDidLoad, и оно перераспределяет его, и, таким образом, значение равно nil

0 голосов
/ 07 февраля 2012

Я думаю, что вы можете отсутствовать в синтезе переменной RetrievalTVC.m файл класса.

Измените свойство с

@property (nonatomic, copy) NSString *string;

на:

@property (nonatomic, retain) NSString *string;

Если все решения не работают, то почему бы вам не предпочесть делать это с помощью переменной делегата, например, Global.

Просто проверьте это, это решит вашу проблему:

глобальная переменная доступ для чтения / записи

0 голосов
/ 07 февраля 2012

Я думаю, что ваша retrieve область видимости может быть неправильной.

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve = [[RetrievalTVC alloc]init];
retrieve.string = searchTrain.text;
//Here when I used NSLog its returning the value 
NSLog(@"%@",retriv.string);

Если это правильно, вы должны проверить свой код, где вы используете retrieve.string

Может быть это retrieve не равно retrieve.

0 голосов
/ 07 февраля 2012

Необходимо создать свойство в RetrievalTVC, например:

RetrievalTVC.h

@property (weak, nonatomic) NSString *string;

и синтезировать его в RetrievalTVC.m файл.

0 голосов
/ 07 февраля 2012

Ваша строка не инициализирована.

Инициализируйте его в вашей инициализации RetrievalTVC.m. Это решит ошибку.

Лучше сделайте это собственностью.

Редактировать: сделать это.

RetrievalTVC.h

#import<UIKit>
@interface

   NSString *string;//comment this line ..this line is not required.
    @property (nonatomic, copy) NSString *string;

@end

RetrievalTVC.m

#import"RetrievalTVC.h"

@implementation

@synthesize string;
// memory management

    - (void) dealloc
    {
    [super dealloc];
    [self.string release];
    }

и обновите его в своем существующем коде:

- (void)viewDidLoad
{
[super viewDidLoad]; // the list method is not required
}

Теперь это будет работать

0 голосов
/ 07 февраля 2012

Вы создали свойство строки в классе поиска или присвоили его?

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