gpt4 book ai didi

objective-c - 将不可变数组传递给可变属性

转载 作者:行者123 更新时间:2023-11-28 22:47:30 33 4
gpt4 key购买 nike

在我的 prepareForSegue 方法中,我将从 NSUserDefaults 检索到的不可变数组传递给 DetailViewController 可变字典属性。我是否需要在修改数组之前创建数组的可变副本,或者这是否会在 NSMutableDictionary 类设置方法中自动发生?

我的代码...

ViewController.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"EditReminder"])
{
UINavigationController *navigationController = segue.destinationViewController;
DetailViewController *detailViewController = [[navigationController viewControllers] objectAtIndex:0];
detailViewController.delegate = self;
[detailViewController setTitle:@"Edit Reminder"];
// Pass ReminderData to detailVC if editing
NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];
NSArray *remindersArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"reminders"];
detailViewController.reminderData = [remindersArray objectAtIndex: selectedRowIndex.row];
}
}

DetailViewController.h

@property (strong, nonatomic) NSMutableDictionary *reminderData;

DetailViewController.m

- (void)viewDidLoad
{
[super viewDidLoad];

if (self.reminderData) {
// Reminder data from user defaults is immutable. Create mutable copy.
// Is this necessary?
self.reminderData = [self.reminderData mutableCopy];
}
else {
self.reminderData = [[NSMutableDictionary alloc] init];
}
}

最佳答案

您需要创建可变副本,但您的实现是错误的。

prepareForSegue 中,您需要执行 mutableCopy,否则您的属性中已经存储了一个错误的对象。在 viewDidLoad 中没有理由这样做,它可以被认为是一个错误。

关于objective-c - 将不可变数组传递给可变属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12828506/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com