Как добавить данные в метку - PullRequest
0 голосов
/ 17 февраля 2012

Я слежу за видео по разработке Stanford для iOS на iTunes U, однако я застрял в проблеме!

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

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

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

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

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

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

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

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

Ответы [ 2 ]

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

Когда нам нужно отправить обновления на другие контроллеры представлений / представлений, мы используем уведомления через 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];            

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

    [[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];
0 голосов
/ 17 февраля 2012

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

...