我有一个具有 NSMutableDictionary
作为属性的类:
@interface Alibi : NSObject <NSCopying>
@property (nonatomic, copy) NSMutableDictionary * alibiDetails;
@end
具有以下构造函数:
- (Alibi *)init
{
self = [super init];
_alibiDetails = [NSMutableDictionary dictionary];
return self;
}
及复制方法:
- (Alibi *)copyWithZone:(NSZone *)zone
{
Alibi *theCopy = [[Alibi alloc] init];
theCopy.alibiDetails = [self.alibiDetails mutableCopy];
return theCopy;
}
当我尝试调用 setObject:ForKey:
时,出现运行时错误发送到不可变对象(immutable对象)的变异方法
。
我在 View Controller 中将 Alibi
对象声明为 @property (copy, nonatomic) Alibi * theAlibi;
并使用 self.theAlibi 对其进行初始化= [[Alibi alloc] init]; 在
。viewDidLoad
中
崩溃的行是:
NSString * recipient;
recipient = @"Boss";
[self.theAlibi.alibiDetails setObject:recipient forKey:@"Recipient"];
请让我知道我在这里做错了什么。我正在 iPhone 上为 iOS 5 编写代码。
最佳答案
你有一个“copy”属性,这意味着 - 你的 NSMutableDictionary 将调用 -copy 方法并在分配给合成实例变量之前返回一个常规 NSDictionary。 This thread提供一些有关解决此问题的一些选项的信息。
关于objective-c - NSMutableDictionary 崩溃并显示 "mutating message sent to immutable object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12156172/