2015-01-21 3 views
-2

Я пытаюсь просто получить NSNumber из другого класса.Как я могу использовать NSNumber из другого класса?

Что у меня в Class2.h:

#import "Class1.h" 

@property (strong,nonatomic) NSNumber *rowTodelete; 

Это как мой Class2.m выглядит следующим образом:

- (void)viewDidLoad { 

    self.rowTodelete = 3; 
} 

В моей Class1.h

#import "Class2.h" 

В мой класс1.m

-(void)viewDidAppear:(BOOL)animated 
{ 

Class2 *secondClass = [[Class alloc] init]; 

    NSNumber *newNumber = secondClass.rowToDelete; 

    NSLog(@"the new number is %@",self.newNumber); 
} 

И я продолжаю получать значение null. Я просто хочу получить свой NSNumber из Class2 и назначить его новому NSNumber в Class1. Что я делаю не так?

+1

Пожалуйста, постарайтесь быть более внимательными при публикации кода. Вы не можете назначить примитив объекту ('self.rowTodelete = 3'), а также не можете иметь класс с именем' Class' ('[[Class alloc] init]'). –

+0

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

+0

Я только что оставил комментарий, я не проголосовал за вас вверх или вниз. –

ответ

1

Class2 *secondClass = [[Class alloc] init]; создает и создает экземпляр нового экземпляра Class. Никто еще не видел этого случая раньше. Это то, что alloc и init сделать. Поэтому у этого класса будут свои начальные значения по умолчанию для всех полей.

Я не уверен, насколько это покровительственно, но предоставить дополнительную информацию:

Класс декларации как Class или Class2 устанавливающей форму. Это шаблоны проектирования для того, как будут действовать экземпляры этого класса. Каждый экземпляр представляет собой отдельное производство из формы.

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

Когда вы выполняете alloc] init], вы производите новый экземпляр класса. Каждый экземпляр имеет свое собственное хранилище с именем rowToDelete. Таким образом, экземпляр secondClass, который вы производите в viewDidAppear:, (с некоторыми незначительными предположениями о нераскрытом коде) полностью отличается и использует совершенно различное хранилище, то, что установлено self.rowToDelete. Различные экземпляры, разные хранилища.

Подумайте о чем-то вроде NSMutableString. Он будет использовать некоторое хранилище для символов в строке. Каждая строка должна иметь собственное хранилище, а изменения в отношении одного не должны влиять на другие. То же самое с rowToDelete.

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

Если вы можете предоставить больше контекста, я могу быть более конкретным.

+0

Так это неправильный способ сделать это? – burrGGG

+0

@burrGGG, если вы хотите сохранить свойство экземпляру класса и у кого-нибудь еще доступ к этому свойству, второй человек должен получить доступ к одному экземпляру. На самом деле недостаточно контекста, чтобы сказать больше. – Tommy

0

Проблема заключается в том, что вы устанавливаете значение в class2 в viewDidLoad

Этот метод не вызывается, пока не был загружен ViewController и собирается отображаться.

Я не знаю специфики того, чего вы пытаетесь достичь, но вы можете, например, изменить суперкласс класса2 на NSObject и перенести назначение в класс2 init. Или вы можете сохранить класс2 в качестве подкласса viewController и поместить назначение в один из его методов init.

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