2012-02-16 4 views
0

Я следил за видео разработкой в ​​Stanford iOS на iTunes U, , однако я застрял на проблеме!Как добавить данные на ярлык

Я строю калькулятор, и одна из задач - отправить сделанные операции и т. Д. На ярлык, который в основном хранит запись всех номеров и операций.

В моей программе это должно происходить каждый раз, когда нажимается кнопка (что я сделал).

Однако я не могу по какой-либо причине отправить данные на метку в другом контроллере представления.

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

self.memoryDisplay.text = [self.memoryDisplay.text stringWithAppendingString:digit]; 

поэтому я подумал, Ill импортировать второй контроллер представления, объявить метку свойства во второй точки зрения, синтезировать в главном виде и отправить его с помощью.

self.secondview.memoryDisplay.text = [self.memoryDisplay.text stringWithAppendingString:digit]; 

Однако это не сработает, кто-нибудь знает простой способ сделать это?

+1

Что не работает? Вы получаете сообщение об ошибке? Возможно, добавьте немного больше контекста того, где находятся эти строки кода. – picciano

ответ

0

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

+0

Это потому, что каждый раз, когда пользователь нажимает кнопку, я хочу показать, что пользователь щелкнул на ярлыке на другом экране. в основном запись того, что пользователь набрал, и у меня есть методы в моем основном представлении, который проверяет нажатие кнопки и обновляет метку на главном представлении тем, что когда-либо вводил пользователь (например, реальный калькулятор), я думал, что это самый простой способ сделать это заключается в использовании того же метода. – user1214037

+0

Почему бы вам просто не просмотреть все виды (UILabel, UIButton и т. д.) на одном экране, управляемом одним контроллером? Я ожидал бы, что калькулятор будет иметь один экран, где я буду вводить команды и видеть результаты. Если вы ищете запись команд, просто сохраните ее в некоторой структуре данных (например, файлы), которая затем будет доступна из другого представления при загрузке. – rajagp

0

Когда нам нужно отправлять обновления другим диспетчерам просмотров/просмотра, мы используем уведомления через NSNitificationCenter.

По мнению, что имеет информацию, что другой вид потребности мы делаем что-то вроде этого:

 // Setup Dictionary to contain values we want to pass. 
     NSMutableDictionary *theUserInfo = [[[NSMutableDictionary alloc] initWithCapacity:1] autorelease]; 
     // Add our Objects to the Dictionary with a Key to get them out 
     [theUserInfo setObject:self forKey:@"ElementWithGesture"]; 

     NSValue * pointAsObject = [NSValue valueWithCGPoint:translation]; 
     [theUserInfo setValue:pointAsObject forKey:@"PanTranslation"]; 
     [theUserInfo setObject:gestureRecognizer forKey:@"TheGestureRecognizer"]; 

      // Post the Group Pan Notification. 
     [[NSNotificationCenter defaultCenter] postNotificationName:kNCSEGroupPanGesture 
                  object:nil 
                  userInfo:theUserInfo];    

Тогда в представлении, что нуждается в информации мы добавим код, чтобы сообщить Notification Center, что мы заинтересованы в конкретные уведомления:

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(groupHandlePanGesture:) // routine that will handle notification 
               name:kNCSEGroupPanGesture 
               object:nil]; 

Тогда вам нужен метод, который фактически обрабатывает отправил уведомление:

-(void) groupHandlePanGesture:(NSNotification*)notification{ 

     // unpack our objects from the dictionary 
IoUIScreenElement *element = (IoUIScreenElement *) [[notification userInfo] objectForKey:@"ElementWithGesture"]; 

if ([self canPan] && ![self elementLocked]) { 
     // unpack our pointVlue 
    NSValue *pointValue = [[notification userInfo] valueForKey:@"PanTranslation"]; 
    CGPoint translation = [pointValue CGPointValue]; 

    if (IOFNOTEQUAL(self, element) & [self isSelected]){ 
     CGFloat xPosition = self.frame.origin.x + translation.x; 
     CGFloat yPosition = self.frame.origin.y + translation.y; 

     [self setOrigin:CGPointMake(xPosition, yPosition)]; 
    } 
} 
} 

Затем, когда вы прослушиваете уведомления, вы хотите удалить своего наблюдателя. В зависимости от ваших взглядов это чаще всего делается в delloc.

[[NSNotificationCenter defaultCenter] removeObserver:self 
                name:kNCSEGroupPanGesture 
                object:nil]; 
Смежные вопросы