我创建了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的另一个错误......;) 如果有人有这种行为的原因,请告诉我们!
答案 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的长形式不再有效。)