objective-c - NSMutableDictionary 崩溃并显示 "mutating message sent to immutable object"

标签 objective-c ios ios5 nsmutabledictionary

我有一个具有 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/

相关文章:

iphone - UISearchBar 中范围按钮文本的颜色

ios - 在 iPhone 上显示 UISplitViewController 的详细 View Controller

ios - ViewForAnnotation 在 iPad 6.0 模拟器中工作,但在 iPad 5.1 模拟器中不起作用

iphone - Touches - parent 和 child 的用户互动

ios - 一次显示和控制 2 个 View

iOS6 : MFMailComposeViewController is not displaying

ios - 如果按下 UIButton,手势不会触发

ios - 将 "new" View 添加到没有 View 的应用程序中

iphone - 防止移动 safari 上的水平滚动,overflow-x :hidden breaks site

objective-c - 在 iOS 中切换 View