Objective-cでかなり新しいですが、これまでのところカードアプリを最初から作成することができました。 ゲームのアイデアは、PCに対してカードゲームをすることです。解約されたインスタンスに送信されたメッセージ
updatePlayerCardView関数では、プレイヤーが持っているカードのグループを取得し、グループ名とともに画面上にボタンを配置します。 これはかつてのために正常に動作しますが、関数は、それがで失敗二回呼び出されます:
- [CFStringに保持]:割り当て解除インスタンスに送信されたメッセージが0x604ac60
いくつかのデバッグとの研究の後、私はあることを考え出しこれが発生した行は、次のとおり
[cardButtonのsetTitle:[NSStringのstringWithFormat:グループ] forState:UIControlStateNormalの "%@率(%I)"、[グループグループ名]、[プレーヤーgetCardGroupCount @]。
したがって、NSStringは明らかに割り当てが解除されます。私が理解できないことは、すべてのボタンを再作成する必要があります。なぜインスタンスを解放するのですか? 毎回プレーヤーの表示を更新するより良い方法はありますか?ボタンの量は最初から分かっていません。
-(void)updatePlayerCardView {
NSMutableArray *groups = [[[game players] objectAtIndex:0] getCardGroups];
Player *player = [game getPlayer:0];
int x = 13;
int y = 157;
for(int i = 0; i < [groups count]; i++) {
QuartetGroup *group = [groups objectAtIndex:i];
int cardGroupCount = [player getCardGroupCount:group];
if(cardGroupCount == [[game quartet] getCardsPerGroupCount]) {
}else{
UIButton *cardButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
cardButton.frame = CGRectMake(x, y, 140, 37);
cardButton.tag = i;
[cardButton setTitle:[NSString stringWithFormat:@"%@ (%i)", [group groupName],[player getCardGroupCount:group]]
forState:UIControlStateNormal];
[cardButton addTarget:self action:@selector(playerCardClicked:) forControlEvents:UIControlEventTouchUpInside];
[[self view] addSubview:cardButton];
//NSLog(@"Card group added to view %@", [group groupName]);
if(i == 2 || i == 5 || i == 8 || i == 11) {
x += 157;
y = 157;
}else{
y += 45;
}
}
}
}
groupNameがクラスQuartetGroupに設定されています: – Johan
プロパティですか?そうであれば、それを保持するか、または割り当てするように指示されていますか?それが保持されていることを確認します。 – kevboh