2014-02-27 22 views
0

我試圖讓多個玩家匹配遊戲卡。我創建了一個類,它是NSObject的一個子類,名爲Player。一個Player對象將有一個名稱,高分,最後一個分數,並且布爾當前正在播放實例。每次在文本字段中輸入新名稱時,我都試圖創建一個新玩家。我將在以後儲存玩家。現在我只想創建一個新玩家,讓用戶在文本字段中輸入他們的名字。並將用戶的回覆存儲在文本字段中。以下是我的Player.m文件從文本字段存儲字符串作爲播放器名稱目標C

#import "Player.h" 

    @implementation Player 

    -(NSString *) nameOfPlayer:(Player *)playerName{ 
     return self.name; 
    } 

    -(void) setPlayerName:(NSString *) nameOf{ 
     self.name = nameOf; 
     self.lastScore = 0; 
     self.highestScore = 0; 
     self.playing = YES; 
     return; 
    } 

    -(id)init{ 
     self = [super init]; 
     self.name = @""; 
     self.lastScore = 0; 
     self.highestScore = 0; 
     self.playing = YES; 
     return self; 
    } 

    @end 

我本來沒有那個init,直到我試圖尋找一個在線解決方案。我對iOS編碼有點新,所以我不確定如何設置構造函數(或者他們甚至有這些)。以下是我如何嘗試實例化播放器對象:

- (IBAction)handleButtonClick:(UIButton *)sender { 
     Player * friend = nil; 
     nameText = self.nameEntryField.text; 
     [friend setPlayerName:nameText]; 
     NSLog(@"%@", [friend nameOfPlayer:friend]); 
    } 

我的應用程序在我試圖設置播放器名稱後立即中斷它的線程。我有點卡住這個,所以任何幫助將不勝感激。

+0

你是什麼意思「我的應用程序打破它的線程」? – rmaddy

回答

1
- (IBAction)handleButtonClick:(UIButton *)sender { 
     Player * friend = [[Player alloc] init]; // Initialize this 
     nameText = self.nameEntryField.text; 
     [friend setPlayerName:nameText]; 
     NSLog(@"%@", [friend nameOfPlayer:friend]); 
} 

您已完成像Player * friend = nil;這意味着這是零對象。然後你試圖在零對象上使用方法setPlayerName:。由於這個應用程序中斷。

所以你需要使用[[Player alloc] init]來初始化對象。

+0

謝謝,這幫了很大的忙!它仍然在[friend setPlayerName:nameText]中斷;然而,現在我知道,朋友來到這裏時不是零。我也改變了setPlayerName只更改名稱。我會盡量玩弄它,但感謝您幫助我解決構造問題。 (我自己習慣Java) –

+0

@PatrickWilliamWalsh只是爲了您的筆記。當你要創建新對象時,你需要初始化它,並且每當你想從其他數據持有者保存值時,只需創建對象並引用它,不需要初始化這個時間。 –

0

這是尷尬。我對xCode IDE不熟悉,並且意外地選擇了該行代碼作爲斷點。在回答之前,代碼很好。