私の問題はNSMutableArray
、ヘッダー ファイルで定義されているタイプのクラス プロパティを持っているにもかかわらず、配列要素の 1 つ ( NSDictionary
) を変更しようとすると、次のランタイム エラーが発生することです。
2013-01-16 14:17:20.993 負債 [5674:c07] *キャッチされていない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: '-[__NSCFArray replaceObjectAtIndex:withObject:]: 変更メソッドが不変オブジェクトに送信されました'
ヘッダー宣言:
// BudgetViewController.h
#import <UIKit/UIKit.h>
@interface BudgetViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
- (IBAction)afterTaxIncomeEditingDidEnd:(id)sender;
@property (strong, nonatomic) NSMutableArray *budgetArray;
@property (strong, nonatomic) IBOutlet UITextField *afterTaxIncome;
@property (strong, nonatomic) IBOutlet UITableView *budgetTableView;
@end
エラーを生成するメソッド:
-(void)applyCCCSWeights
{
NSMutableDictionary *valueDict;
NSString *newAmount;
for (id budgetElement in [self budgetArray]) {
valueDict = [[NSMutableDictionary alloc] initWithDictionary:budgetElement];
newAmount = [NSString stringWithFormat:@"%0.2f", [[self afterTaxIncome].text floatValue] * [[budgetElement objectForKey:@"cccs_weight"] floatValue]];
[valueDict setValue:newAmount forKeyPath:@"amount"];
[[self budgetArray] replaceObjectAtIndex:0 withObject:valueDict];
NSLog(@"%0.2f (%0.2f)", [[budgetElement objectForKey:@"amount"] floatValue], [[self afterTaxIncome].text floatValue] * [[budgetElement objectForKey:@"cccs_weight"] floatValue]);
}
[self.budgetTableView reloadData];
}
//replaceObjectAtIndex:0
上記は単なるプレースホルダーであることに注意してください。これは正しいインデックスに置き換えられます。