NSMutableDictionary
キーと値のペアでいくつかのアイテムを保持するがあります。キー付きの文字列を保存して問題なく取得しましたが、typeの値を保存NSUInteger
して辞書から取得しようとすると、非常に大きな値になってしまいます。
ifステートメントの最初の部分で、探している値がnullでないか、ゼロより大きいかどうかを確認します。基本的に、アクセスできる辞書にスコアまたは値を保持して、追加または削除できるようにしようとしています。
elseステートメントでわかるように、2つのNSLog
ステートメントがあります。ここで、値の違いがわかります。最初のNSLog
ステートメントは、「ハッピー」ボタンをクリックすると予想されるように、100の値を表示します。ただし、値がディクショナリから取得されると、currentTotalは109709424になります。これは、この整数値を文字列に変換する際に使用しているフォーマット指定子と関係があると確信しています。この値currentTotalを、辞書の「Total」キーの下にintまたはNSUIntegerとして格納しようとしましたが、非Objective-cタイプのオブジェクトから「id」への変換がARCで許可されていないため、スタックします。
NSUInteger currentTotal = 0;
NSUInteger happinessValue = 100;
NSUInteger sadnessValue = 20;
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if ([appDelegate.data valueForKey:@"Total"] != nil || [appDelegate.data valueForKey:@"Total"] > 0) {
currentTotal = (int)[appDelegate.data valueForKey:@"Total"];
if ([segue.identifier isEqualToString:@"Happy"]) {
[segue.destinationViewController setHappiness:(int)happinessValue :segue.identifier];
currentTotal = add(currentTotal, happinessValue);
[appDelegate.data setObject:(NSString *)[NSString stringWithFormat: @"Value: %i", happinessValue] forKey:@"Value"];
} else if ([segue.identifier isEqualToString:@"Sad"]) {
[segue.destinationViewController setHappiness:(int)sadnessValue :segue.identifier];
currentTotal -= [segue.destinationViewController setTotalValue:happinessValue];
[appDelegate.data setObject:(NSString *)[NSString stringWithFormat: @"Value: %i", sadnessValue] forKey:@"Value"];
}
}
else {
if ([segue.identifier isEqualToString:@"Happy"]) {
[segue.destinationViewController setHappiness:(int)happinessValue :segue.identifier];
NSLog(@"Old value ELSE: %i", currentTotal);
currentTotal = [segue.destinationViewController setTotalValue:happinessValue];
NSLog(@"New value ELSE: %i", currentTotal);
[appDelegate.data setObject:(NSString *)[NSString stringWithFormat: @"Value: %i", happinessValue] forKey:@"Value"];
} else if ([segue.identifier isEqualToString:@"Sad"]) {
[segue.destinationViewController setHappiness:(int)sadnessValue :segue.identifier];
currentTotal = [segue.destinationViewController setTotalValue:happinessValue];
[appDelegate.data setObject:(NSString *)[NSString stringWithFormat: @"Value: %i", sadnessValue] forKey:@"Value"];
}
NSLog(@"Current Total: %i", currentTotal);
[appDelegate.data setObject:[NSString stringWithFormat:@"%d", currentTotal] forKey:@"Total"];
NSLog(@"Total stored: %i", (int)[appDelegate.data valueForKey:@"Total"]);
}
}