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;

视图控制器.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; 只是被忽略,有利于自动合成 NSString *_PlayerName; 成员变量。

我会这样做

dumpNSString *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 回答