2014-04-24 2 views
0

UIButton 제목이 ---> Free Coins - Press <----이고 viewControllerA 인 경우 그것을 클릭 할 때viewControllerA에서 viewControllerB로 값을 보내는 방법은 무엇입니까?

- (IBAction)triggerVideo 
{ 
    [AdColony playVideoAdForZone:@"HIDDEN-CODE-PRIVACY" withDelegate:nil 
     withV4VCPrePopup:YES andV4VCPostPopup:YES]; 
} 

(50) 동전 얻게됩니다 :

viewControllerA

// Get currency balance from persistent storage and display it 
- (void)updateCurrencyBalance 
{ 
    NSNumber* wrappedBalance = [[NSUserDefaults standardUserDefaults] 
     objectForKey:kCurrencyBalance]; 
    NSUInteger balance = wrappedBalance && [wrappedBalance isKindOfClass: 
     [NSNumber class]] ? [wrappedBalance unsignedIntValue] : 0; 
    [currencyLabel setText:[NSString stringWithFormat:@"%u", balance]]; 
} 

그러나 레이블이 lblpts 전화에이 동전 만 viewControllerB에 표시해야합니다. 또는 최소한 둘 다 같은 값으로 표시하십시오!

ints :를 사용하려고했습니다. 예 : int pointobjectForKey:@"point", 예컨대 :

savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

nPoint = [[savedStock objectForKey:@"point"] intValue]; 
[_lblpts setText:[NSString stringWithFormat:@"%d",nPoint]]; 

그러나, 나는 균형 만 viewControllerB 라벨에 표시 할 수없는 것!

+0

'path'에서 파일에 무엇입니까? 당신이 그것을 초기화 한 후에'savedStock'에 무엇이 있습니까? –

+0

광고가 끝날 때까지 동전을 기다리는 것이 좋습니다. D –

답변

1

viewControllerB에 속성 변수가 있어야하고 viewControllerB을 눌러 해당 변수를 점으로 초기화해야합니다.

당신은 스토리 보드를 사용하는 경우 :

[self performSegueWithIdentifier:@"SegueB" sender:self]; 

prepareForSegue에서 방법은 최신 포인트 속성 변수를 업데이트합니다.

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"SegueB"]) { 
     DetailVCB *detailB = (DetailVCB *)segue.destinationViewController; 
     detailB.points = 50; // the variable which has latest points. 
    } 
} 

당신이 XIB를 사용하는 경우 다음 당신이 ViewControllerA.m이 추가 얻을 수 있습니다

@property (nonatomic, assign) NSInteger points; 

ViewControllerB.m 파일에서 :

ViewB *ScreenB = [[[ViewB alloc]initWithNibName:@"ViewBNib" bundle:nil] 
    autorelease]; 
ScreenB.points = balance; //balance is the variable having latest points 
[self.navigationController pushViewController:ScreenB animated:YES]; 

ViewControllerB.h에서 파일과 속성 선언을 추가

- (void)viewDidLoad 
{ 
    NSString *str = [NSString stringWithFormat: @"%d", self.points]; 
    [self.pointsLbl setText:str]; 
} 
+0

사례를 제공해 주시겠습니까? @property IBOutlet UILabel * currencyLabel; ? B to B 또는 A to B를 의미합니까? – Jking

+0

아니요 이야기 게시판을 사용하지 않습니다. – Jking

+0

또한 NSUserDefault를 사용하여 ViewControllerB에 저장하고 검색 할 수 있습니다. XIB를 사용하고 있습니까? – user2071152

0

두 대의보기 컨트롤러간에 데이터를 전달하기 위해 사용자 지정 대리자 메서드 또는 알림 센터 메서드를 사용할 수 있습니다. 또한 속성을 사용하여 데이터를 전달하는 것도 좋은 방법이지만 한 뷰 컨트롤러에서 다른 뷰 컨트롤러로 전달할 정보가 많은 경우 사용자 지정 대리자 메서드를 사용해야합니다.

+0

님께 감사드립니다. – Jking

+0

[사용자 지정 대리인] (http://www.alexefish.com/post/522641eb31fa2a0015000002)이 예제를 확인하십시오. – nikhil84

+0

@Jking 투표를 올리거나 정답으로 선택하면 감사하겠습니다. – nikhil84

0

viewControllerA에서 viewControllerB으로 전달되는 전달 메시지와 같습니다.

ViewControllerB *vc = [ViewControllerB alloc] init]; 
[vc UpdatepPoints:pointshere]; 
: 당신은 그냥 같은 것을 할 필요가, 당신의 viewControllerA에서 지금

- (void)UpdatepPoints:(int)pts { 
    _point = pts; 
} 

:

하는의 당신이 viewControllerB의 방법이 있다고 가정 해 봅시다 :이 쉽게 아래에 간단한 방법으로 달성 될 수있다

그게 전부입니다. 점수를 얻으려면 ViewControllerB의 포인트 속성을 사용하십시오.

+0

그러나 ViewControllerB를 다시 누르는 동안 ViewControllerB의 인스턴스가 하나 더 생성되면 해당 포인트 변수는 업데이트되지 않습니다. 따라서 ViewControllerB의 인스턴스를 할당하면됩니다. – user2071152

+0

VC-A의 라벨에서 VC-B의 라벨까지 두 개의 라벨과 포인트를 전달해야합니까? 아니면 위의 코드로 VC-B에 나타나게 할 수 있습니까? – Jking

0

NSNotificationCenter을 사용하여 코인 업데이트 이벤트를 브로드 캐스트 할 수 있습니다.delegateself 여기

- (IBAction)triggerVideo 
{ 
    [AdColony playVideoAdForZone:@"HIDDEN-CODE-PRIVACY" withDelegate:self 
     withV4VCPrePopup:YES andV4VCPostPopup:YES]; 
} 

참고 : 그래서 것 코드처럼 보인다. 지금 같은 delegate 구현 :

- (void)onAdColonyV4VCReward:(BOOL)success currencyName:(NSString*)currencyName 
    currencyAmount:(int)amount inZone:(NSString*)zoneID 
{  
    NSNumber *number = [[NSNumber alloc] initWithInt:amount]; 
    [[NSNotificationCenter defaultCenter] postNotificationName: 
     @"kCoinUpdateNotification" object:number]; 
} 

을 그리고이 같은 viewControllerB에서이 알림을 수신 :

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(
    updateCurrencyBalance:) name:@"kCoinUpdateNotification" object:nil]; 

그리고 기능 구현과 같은 간다 :

- (void)updateCurrencyBalance:(NSNotification*)_notifObject 
{ 
    NSNumber *wrappedBalance = [_notifObject object]; 
    NSUInteger balance = wrappedBalance && [wrappedBalance isKindOfClass: 
     [NSNumber class]] ? [wrappedBalance unsignedIntValue] : 0; 
    [currencyLabel setText:[NSString stringWithFormat:@"%u", balance]]; 
} 
+0

Nope VERY WRONG – Jking

관련 문제