Поскольку ответ на вопрос в моем комментарии, похоже, не ожидается, я просто собираюсь выйти на конечность и предположить, что ваш словарь cacheUploadDataDic
содержит еще несколько NSDictionary
объектов внутри него и что ваш сбой происходит, когда вы пытаетесь изменить один из этих словарей. Это терпит неудачу, потому что mutableCopy
выполняет поверхностное копирование; копируется только сам объект словаря, и все объекты внутри словаря, включая любые дополнительные словари, остаются их исходными неизменяемыми "я" .
Вы можете исправить это, сделав вместо этого глубокую копию словаря. Есть несколько способов сделать это, но, возможно, самый простой - использовать функцию CFPropertyListCreateDeepCopy
. К сожалению, нам нужно соединиться, так как этот API доступен только на уровне CoreFoundation, причина которого - одна из тех вечных загадок.
В любом случае, сделайте что-то вроде этого:
NSDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"SomeKey"];
NSMutableDictionary *mutableDict = CFBridgingRelease(
CFPropertyListCreateDeepCopy(kCFAllocatorDefault,
(__bridge CFDictionaryRef)dict,
kCFPropertyListMutableContainersAndLeaves)
);
Теперь вы сможете изменять содержание mutableDict
до уровня своего сердца.