2012-05-02 38 views
0

我想这个委托方法内resultingPoints的价值访问从属性的值是在方法被设置为另一个方法

- (void)perksDetailsViewController:(PerksDetailsViewController *)sender didPassRequiredPoints:(NSNumber *)requiredPoints withCard:(Card *)selectedCard 
{ 

    double perksPoints = [requiredPoints doubleValue]; 

    self.resultingPoints = [NSNumber numberWithDouble:[selectedCard subtractPoints:perksPoints] ]; 

    NSLog(@"points remaining %@", self.resultingPoints); 
} 

这工作得很好,但后来当我试图访问在下面的方法内部生成结果点,因为正如我放置的NSLog所说,结果点有一个空值。

- (void) didPressDone:(id)sender { 

    PointsResultsViewController *pointsResults = [self.storyboard instantiateViewControllerWithIdentifier:@"resultsPointsVC"]; 

    [self.navigationController pushViewController:pointsResults animated:YES]; 

    pointsResults.leftPointsLabel.text = [self.resultingPoints stringValue]; 

    NSLog(@"hey points left is%@", self.resultingPoints); 
} 

从第一个方法获得resultsPoints值的方法是什么? 在此先感谢。

EDIT: 日志输出

2012-05-02 15:47:48.297 CardWallet [22196:F803]点剩余900

2012-05-02 15:47:49.291 CardWallet [ 22196:F803]哎留下点是(空)

+0

只是尝试 - (空)didPressDone:(ID)发送{ 的NSLog(@ “哎留下点是%@”,self.resultingPoints); PointsResultsViewController * pointsResults = [self.storyboard instantiateViewControllerWithIdentifier:@“resultsPointsVC”]; pointsResults.leftPointsLabel.text = [self.resultingPoints stringValue]; [self.navigationController pushViewController:pointsResults animated:YES]; } –

+0

它只是一个didPressDone方法的副本: – Grauzten

+0

不,它具有逻辑上的差异。只有在推送视图后,才将值赋给左边的标签。在推动视图之前,必须尝试设置该值。 –

回答

1

从你最后的评论:

这就是它的财产申报@property (nonatomic, weak) NSNumber *resultingPoints;

这可能是你的问题的根源。如果没有其他任何东西保留它,那么弱财产将被释放并设置为nil,在这里是这种情况。让它成为一个强大的属性,当你推新视图控制器时它仍然会在周围。

从您在聊天所给出的细节,你实际上是处理这一类的两个不同的实例。一个在屏幕上,另一个用作代表。

在分配代表,你必须确保它是相同的对象,它是在屏幕上。当segue的目标视图控制器是即将出现的视图控制器时,最好在prepareForSegue中完成。

+0

好吧2我会试试这个。 – Grauzten

+0

我把它改为强,但是,我的NSLog为didPressDone方法仍然说,resultsPoints是零:( – Grauzten

+0

现在检查它 – Grauzten