2012-05-02 65 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