0

だから私は Player と呼ばれる NSObject を持っています

Player.h
@interface Player : NSObject{
    NSString *PlayerName;
}
@property (nonatomic, retain, strong) NSString *PlayerName;
Player.m
@synthesize PlayerName;

そして、私の MainViewController.h で

#import "Player.h"
@interface ViewController : UIViewController<UITextFieldDelegate>{
Player *MainPlayer;
}
@property (weak, nonatomic) IBOutlet UITextField *TextField;

ViewController.m

- (void)textFieldDidEndEditing:(UITextField *)textField {
    Choice = TextField.text;
    [MainPlayer setName:Choice];
    NSLog(@"Choice: %@ Name: %@",Choice, MainPlayer.PlayerName);
}

これは、NSLog が Choice:(input given) Name: (null) を返すことを除いて機能するはずです。

コードを変更しようとしましたが、何も機能しません:P 助けてくれてありがとう:)

4

3 に答える 3

1

この行が欠落していると思います。

MainPlayer = [[Player alloc]init]

インスタンスの値を設定する前に、オブジェクトを割り当てる必要があります。viewDidLoad で割り当てることができます。そして、インスタンスの値を設定します

 MainPlayer.PlayerName = field.text;

また

 [MainPlayer setPlayerName:field.text];
于 2012-08-22T08:06:35.423 に答える
0

まず、NSString プロパティについては、強力ではなくコピーを使用します。これにより、NSString が不変であると考えるのを回避できますが、その後変更される NSMutableString が渡されます。

デフォルトでは、@synthesize はそのための _propertyName 変数を作成します。自動合成された NSString *_PlayerName を優先して単に無視されています。代わりにメンバー変数。

私はこれをするだろう

dump 使用をNSString *PlayerName; 削除します@synthesize PlayerName@property (nonatomic, retain, copy) NSString *PlayerName;

それがどのように機能するかを見てください。

于 2012-08-22T07:52:12.090 に答える
0

いくつかのリード:

  • MainPlayerで適切に初期化されていViewController.hますか (つまり、使用時に nil ではない)?

  • 次の行:

     [MainPlayer setName:Choice];
    

    代わりに読む必要があります:

     [MainPlayer setPlayerName:Choice];
    

補足: 変数名は大文字で始めるべきではありません。

于 2012-08-22T07:53:04.713 に答える