我创建了一个新类,但为什么它不保留对象实例中的值?

时间:2015-10-19 20:07:52

标签: ios objective-c xcode class

我创建了Player.h类作为模型。

#import <Foundation/Foundation.h>

@class Player;

@interface Player : NSObject

@property (nonatomic, strong) NSString * name;
@property (nonatomic, strong) NSNumber * score;
@property (nonatomic, strong) NSDate   * datetime;

-(id)initWithDictionary:(NSMutableDictionary *)dic;

@end

这是Player.m

#import "Player.h"

@implementation Player

-(id)initWithDictionary:(NSMutableDictionary *)dic {

    self = [super init];

    if (self) {
        self.name = [dic objectForKey:@"name"];
        self.score = [dic objectForKey:@"score"];
        self.datetime = [dic objectForKey:@"datetime"];
    }
    return self;

}


-(id)init {
    self = [super init];

    if (self) {
        self.name = @"";
        self.score = @-1;
        self.datetime = [NSDate date];
    }
    return self;
}

@end

使用课程:

添加一些断点,当我尝试在变量视图上看到变量内容时,它会在对象上显示0个项目,其中应该有一些值。

Player * player = [[Player alloc] init];
player.name = @"Billy";
player.score = @100;
player.datetime = [NSDate date];

NSLog(@"Name:%@ Score:%@ DateTime:%@", player.name, player.score, player.datetime);

Breakpoint stop one - see the init is fine

When try to set anything, it says : 0 keys/values pairs

我无法理解这种行为,任何想法0键?

抱歉,我在stackoverflow中的级别不允许我分享更多链接图片。 的更新: 解决问题。 我只是关闭了Xcode,清理了项目,删除了派生数据,现在工作正常......原因...... xcode的另一个错误......;) 如果有人有这种行为的原因,请告诉我们!

2 个答案:

答案 0 :(得分:2)

您设置的断点是在您打破的行之前停止代码,而不是之后。

如果您跨过代码(直角箭头),您应该会看到player.name = playerName

的结果

答案 1 :(得分:1)

显示带有“0键值对”描述的Player对象是错误的。 Xcode似乎很困惑,认为你的对象是一本字典。另一个线程的建议是重新启动Xcode,清理和重建项目,或两者兼而有之。我会尝试那些东西。

正如其他人所说,你的断点就在你为玩家的name财产分配价值的行上。调试器在执行语句之前停止程序。不是之后,所以name将不会被设置。尝试进一步缩小断点,然后在调试器控制台中键入命令,如evaluate self.name(简称e self.name)。我们这些在GDB上学习Xcode调试器的人习惯使用print(简称p)或po(这是print-object的缩写。{{ 1}}缩写映射到GDB中的po,但是`print-object的长形式不再有效。)