UPDATE: Теперь работает (добавлены исправления, как предложил - Спасибо!)Невозможно создать изменяемую копию NSDictionary
Я пытался клонировать NSDictionary
из информации сотрудников. Основной NSDictionary
создан в другом классе и передан в prepareForSegue
. Я хочу иметь возможность создать изменяемую копию этого NSDictionary
в другом классе, который затем может обновить информацию о сотруднике и отправить ее другому классу для обработки, поэтому у меня все еще есть исходный неизменный набор данных для работы позднее. Я нашел несколько разных примеров в Stack, но ничего не смог получить. Когда я нарушаю метод btn_click
и исследую локальный объект pp
после вызова ..objectForKey
, pp
по-прежнему равен нулю. Что я тут сделал?
obj_person.h
#import <Foundation/Foundation.h>
@interface obj_person : NSObject
@property (strong,nonatomic) NSString *personID;
@property (strong, nonatomic) NSString *personName;
@property (strong, nonatomic) NSString *personTitle;
@end
obj_person.m
#import "obj_person.h"
@implementation obj_person
@synthesize personID = _personID;
@synthesize personName = _personName;
@synthesize personTitle = _personTitle;
@end
viewcontroller.m
#import "ViewController.h"
#import "obj_person.h"
@interface ViewController()
@end
@implementation ViewController
int mCounter = 1;
NSMutableDictionary *mCopy;
NSMutableDictionary *mNsd;
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *arnames = [[NSArray alloc] initWithObjects:@"mary", @"jane", @"stan", @"cartman", nil];
NSArray *arkeys = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:2],[NSNumber numberWithInt:3], [NSNumber numberWithInt:4], nil];
mNsd = [[NSMutableDictionary alloc] initWithCapacity:[arnames count]];
int i = 0;
for (NSString *name in arnames)
{
obj_person *p = [[obj_person alloc] init];
p.personID = [arkeys objectAtIndex:i];
p.personName = name;
[mNsd setObject:p forKey:p.personID];
i++;
}
mCopy = [mNsd mutableCopy];
}
- (IBAction)btn_click:(id)sender
{
NSLog (@"%d original items", [mNsd count]);
obj_person *pp = [mCopy objectForKey:[NSNumber numberWithInt:mCounter]];
NSLog(@"%@", pp.personName);
pp.personName = @"Gerald";
if (++mCounter > [mCopy count])
mCounter = 1;
}
@end
Ваши ключи являются строками, но вы создаете 'pp', используя NSNumber для ключа. Я думаю, вы хотите '[mCopy objectForKey: @" 1 "]' – ChrisH