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

Я долго искал решение, как передать значение из одного класса в другой.В основном я создаю строку NSString через @property в классе «Настройки», который отображается модально.Затем я устанавливаю NSString на определенное значение в зависимости от выбранных настроек, и я хочу, чтобы это значение отображалось также в классе, в котором настройки должны быть изменены.Я также объявляю строку через @property во втором классе и использую код

myController *controller = [[myController alloc] init];
secondClassString = controller.firstClassString

Если я NSLog строку, она показывает (ноль) во втором классе ... Любые идеи, как сделатьэто передать значение?Спасибо

Ответы [ 4 ]

3 голосов
/ 31 марта 2012

предположим, что у вас два контроллера представления, скажем A & B

Ваш A.h

{
  NSString *strData;
  int cId;
}

@property (nonatomic, retain) NSString *strData;
@property (readwrite) int cId;

Теперь в твоем A.m

@synthesize strData,cId;

Ваш B.h

@class A

{
   A *aObj;
}

Теперь у тебя в Б.м

#import "A.h"

- (void) viewDidLoad
{
  aObj=[A alloc] init]; //alloc object of A
  [aObj setCId:10]; //set value for cId
  [aObj setStrData:@"Hello from B"]; //set value for strData
  //do what ever
  [aObj release]; //don't forget
}

Надеюсь, это поможет вам!

2 голосов
/ 31 марта 2012

контроллер первого просмотра:

nsstring * firstString = @ "your string";чтобы передать эту строку во второй контроллер представления, создайте nsstring во второй контроллер представления в контроллере 2-го представления

nsstring *sencondstring;

@ property (nonatomic, retain) nsstring * sencondstring;@synthesize sencondstring;

теперь возвращаемся к первому контроллеру представления, создаем объект второго контроллера представления

firstviewcontroller *firstviewObj=[[firstviewcontroller  alloc]init;

firstviewObj.sencondstring = firststring;ИЛИ firstviewObj.sencondstring = [строка nsstringwithformat: @ "% @", первая строка];

0 голосов
/ 31 марта 2012

Давайте использовать имена двух viewController'ов как FirstViewController и SecondViewController.

Теперь предположим, что вы нажимаете SecondViewController из FirstViewController при нажатии кнопки, затем вам нужно написать этот код под событием нажатия кнопки:

 //   In the FirstViewController

- (void)buttonClicked:(id)sender{

    SecondViewController *second = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle: nil];
 second.secString = firstString;
 [self.navigationController pushViewController:second animated:YES];
 [second release];

}

Здесь вам нужно объявить в SecondViewController.h файле:

NSString *secString;

, а затем создать @property

@property (non atomic,strong) NSString *secString;

В SecondViewController.m вам необходимо @synthesize the secString:

@synthesize secString;

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

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

Просто чтобы проверить Попробуйте и проверьте, передается ли значение firstString в secString, напишите следующий код на viewWillAppear: из SecondViewController

NSLog(@"secString: %@",secString);

Дайте мне знать, если вам нужна дополнительная помощь.

Надеюсь, это поможет.

0 голосов
/ 31 марта 2012

может быть, это поможет вам

запишите это в файл Firstclass.m

SecondView *ObjSecondView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];

objSecondView.secondClassString=Firstclassstring;
[self.navigationController pushViewController:ObjSecondView animated:YES];
[ObjSecondView release];

в SecondView.h

@property(nonatomic,retain)NSString *secondClassString;
//also synthesize this

затем распечатайте в методе viewdidload второго просмотра

-(void)viewDidLoad
{
NSLog(@"your string = %@",secondClassString);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...