2012-02-16 22 views
0

私はiTunes UのスタンフォードiOS開発ビデオ、 に従っていますが、問題が残っています!ラベルにデータを追加するには

私は計算機を構築していますが、その作業の1つは基本的にすべての数字と操作を押さえたラベルに操作などを送ることです。

私のプログラムでは、これはボタンがクリックされるたびに発生します(これは私が行っています)。

しかし、私は別のビューコントローラのラベルに何らかの理由でデータを送信できません。

これは、同じビューで動作するかどうかをテストするために使用したものです。

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

ので、私は、2番目のビューのプロパティラベルを宣言し、病気の輸入に第2のビューコントローラを考えメインビューで合成し、使用してそれを送ります。

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

しかし、これは機能しませんが、誰も簡単な方法を知っていますか?

+1

どうしたらうまくいかないのですか?エラーが発生していますか?これらのコード行がどこにあるのかをもう少し詳しく説明してください。 – picciano

答えて

0

私は完全に理解しています。しかし、なぜ所有者ではないビューコントローラからビューを直接更新しようとしていますか?それは複雑です。必要に応じて、ビュー間でデータを共有する他の方法があります。最も簡単な方法は、グローバルデータのシングルトンを定義することです。

+0

ユーザーがボタンをクリックするたびに、ユーザーがクリックした内容を別の画面に表示する必要があるからです。基本的にユーザーがタイプしたもののレコードと、ボタンの押下を確認し、メインビューのラベルを更新するメインビューのメソッドがあります(実際の電卓のようなものです)同じテクニックを使用することです – user1214037

+0

ただ1つのビューコントローラで管理される1つの画面にすべてのビュー(UILabel、UIButtonなど)を持たないのはなぜですか?電卓には、コマンドを入力して結果を見るための画面が1つあります。コマンドの記録を探しているならば、ロードされたときに他のビューからアクセス可能ないくつかのデータ構造(例えばファイル)に格納するだけです。 – 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];    

:別のビューは、我々はこのような何かを行う必要があるという情報を持っているビューで

特定の通知:

-(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)]; 
    } 
} 
} 

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

次に、あなたが実際に掲載通知を処理する方法を必要とします

通知のリッスンが完了したら、オブザーバーを削除する必要があります。あなたの意見に応じて、これはdellocで最もよく行われます。

[[NSNotificationCenter defaultCenter] removeObserver:self 
                name:kNCSEGroupPanGesture 
                object:nil]; 
関連する問題