【发布时间】:2013-06-29 06:59:37
【问题描述】:
我想以我自己的对象为键将内容保存到 NSMutableDictionary
为此,我为我的对象实现了 NSCopying 协议,以及它使用的所有元素 昨晚,它确实保存了对象,今天早上,当我运行完全相同的代码时,它不再保存它了。
这是为什么?
这些是我的 NSCopying 方法:
- (id)copyWithZone:(NSZone *)zone{
Player *player = [[[self class]allocWithZone:zone]init];
if(player){
player->name = [name copyWithZone:zone];
player->deck = [deck copyWithZone:zone];
}
return player;
}
-(id)copy{
Player *player = [[[self class]alloc]init];
if(player){
player->name = [name copy];
player->deck = [deck copy];
}
return player;
}
-(BOOL)isEqual:(id)object{
if(![object isKindOfClass:[Player class]]){
return NO;
}
Player *player = (Player *)object;
return [self.name isEqualToString:[player name]];
}
-(id)copyWithZone:(NSZone *)zone{
DeckOfCards *deckOfCards = [[[self class]allocWithZone:zone]init];
if(deckOfCards){
deckOfCards->deck = [deck copyWithZone:zone];
}
return deckOfCards;
}
-(id)copy{
DeckOfCards *deckOfCards = [[[self class]alloc]init];
if(deckOfCards){
deckOfCards->deck = [deck copy];
}
return deckOfCards;
}
这就是我想要使用对象的方式: 在 viewDidLoad 中
CGPoint player1CardOrigin = CGPointMake(20, 160);
CGPoint player2CardOrigin = CGPointMake(180, 160);
[origins setObject:[NSValue valueWithCGPoint:player1CardOrigin] forKey:player1];
[origins setObject:[NSValue valueWithCGPoint:player2CardOrigin] forKey:player2];
代码后面的某个地方
Player *player = [game playerToMove];
CGPoint origin = [[origins objectForKey:player]CGPointValue];
此时,原点又是0,0,而不是正确的值
我不明白的是,为什么昨天它起作用了,而今天却不起作用? 我做错了什么?
进一步检查显示:
- (IBAction)click:(id)sender {
Player *player1 = [Player playerWithName:[self getNameFromTextField:tfPlayer1]];
Player *player2 = [Player playerWithName:[NSString stringWithFormat:@"%@ ",[self getNameFromTextField:tfPlayer2]]];
NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
[dict setObject:@"player1" forKey:player1];
[dict setObject:@"player2" forKey:player2];
NSLog(@"dict: %@",dict);
}
多次单击该按钮,产生以下输出:
2013-06-29 10:06:10.165 CardWarGame[3109:c07] dict: {
"2 \n(0)" = (null);
"1\n(0)" = player1;
}
2013-06-29 10:06:13.612 CardWarGame[3109:c07] dict: {
"1\n(0)" = player1;
"2 \n(0)" = player2;
}
2013-06-29 10:06:19.407 CardWarGame[3109:c07] dict: {
"1\n(0)" = player1;
"2 \n(0)" = player2;
}
2013-06-29 10:06:20.798 CardWarGame[3109:c07] dict: {
"1\n(0)" = player1;
"2 \n(0)" = (null);
}
2013-06-29 10:06:21.780 CardWarGame[3109:c07] dict: {
"2 \n(0)" = (null);
"1\n(0)" = player1;
}
2013-06-29 10:06:22.620 CardWarGame[3109:c07] dict: {
"2 \n(0)" = player2;
"1\n(0)" = player1;
}
2013-06-29 10:06:23.402 CardWarGame[3109:c07] dict: {
"2 \n(0)" = (null);
"1\n(0)" = player1;
}
在我看来,有时它无法为给定键保存对象...? 我该怎么做才能解决它,请帮忙
【问题讨论】:
标签: ios save nsmutabledictionary