奇妙な質問があります。クリスマスのアップデートの一環としてアドベントカレンダーを作成していて、同じ賞品のロックを2回解除しないようにしています(賞品はアプリの他の場所で使用されます)。
賞品リストは、データをすばやく入力/読み取る方法のように見えたため、plistに保存されています。
-(Prize*)getPrizeForDay:(NSInteger)integer
{
NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"XmasPresents" ofType:@"plist"];
NSArray* contentArray = (NSArray*)[NSArray arrayWithContentsOfFile:plistPath];
NSDictionary* dictionary = (NSDictionary*)[contentArray objectAtIndex:integer-1];
Prize* prize = (Prize*)[Prize prizeWithType:[[dictionary objectForKey:@"ContentId"]intValue] andName:[dictionary objectForKey:@"Name"] andContent:[dictionary objectForKey:@"Content"] andAnswer:[dictionary objectForKey:@"Answer"]];
if(![self.calendarPrizes containsObject:prize])
[self.calendarPrizes addObject:prize];
else
prize.unlocked = YES;
return prize;
}
self.calendarPrizesが存在しない場合、didFinishLaunchingのアプリデリゲートで初期化され、終了時にNSUserDefaultsに保存されます。この関数はシングルトンクラス内にあります。
関数を再度実行すると、NSArrayがNSArrayでなくなり、NSDictionaryが辞書でなくなり、PrizeがPrizeではなくなったときに奇妙なことが起こります。それらはすべてランダムなCocos2dオブジェクトとして初期化されます。したがって、賞品は複数回追加できます。
基本的に助けて!
アップデート
この文字はiOS6でのみ発生し、今朝iOS 5テストデバイスでテストすると、期待どおりに機能します。