2014-01-08 1 views
3

У меня проблема, когда я ничего не использую, кроме NSMutableDictionaries, но где-то в сохранении/вытягивании данных из Core Data он превращается в NSDictionary, который я не могу редактировать. Вот код:iOS Несовместимые типы указателей (NSMutableDictionary from NSDictionary)

Вид контроллера

@property NSMutableDictionary *myDictionary; 
@synthesize myDictionary; 
myDictionary = [NSMutableDictionary new]; 

//Pull dictionary data in IBAction from somewhere else 
APPOtherViewController *source = [segue sourceViewController]; 
myDictionary = source.otherDictionary; //other dictionary is also NSMutableDictionary 

//On a button press, I save this dictionary to a Core Data transformable attribute (using MR_shorthand): 
APPMyObject *newObject = [APPMyObject createEntity]; 
newObject.coreDictionary = myDictionary; 
[[NSManagedObjectContext defaultContext]saveToPersistentStoreAndWait]; 

я тогда вытащить CD объект в новом контроллере представления на основе множества атрибутов ...

ViewControllerB

@property NSMutableDictionary *myDictionary; 
@synthesize myDictionary; 
myDictionary = [NSMutableDictionary new]; 

APPMyObject *details = [APPMyObject findFirstByAttribute:@"myName" withValue:myName]; 
myDictionary = details.coreDictionary; 

Предупреждение появляется на самой последней строке: «Несовместимые типы указателей, назначаемые« NSMutableDictionary'от' NSDictionary '. Все компилируется и работает нормально, но предупреждение существует не просто так.

Простите меня, если это фундаментальное знание, но почему сохранение словаря до Core Data изменить его с изменчивого на неизменяемое? Если я все изменил до NSDictionary, он отлично работает, но тогда я не могу редактировать информацию и переписывать.

Спасибо!

+0

NSMutableDictionary * myDictionary ;; myDictionary = [myDictionary initWithDictionary: подробности.coreDictionary] –

+0

myDictionary = (NSMutableDictionary *) подробности.coreDictionary; используйте это, он позаботится о предупреждении – amar

ответ

4

В этом случае вы можете использовать это вместо myDictionary = details.coreDictionary;.

myDictionary = [NSMutableDicationary dictionaryWithDictionary:details.coreDictionary]; 

Updation: я увидел, что myDictionary = [NSMutableDictionary new];, эта линия полностью отходов. Даже вы назначаете NSMutableDictionary во время назначения details.coreDictionary. Он попытается присвоить объект NSDictionary переменной NSMutableDictionary, что означает, что myDictionary попытается указать NSMutableDictionary память, что приводит к ошибке времени компиляции. Также Type casting to NSMutableDictionary myDictionary = (NSMutableDictionary*)details.coreDictionary;, временный решение вашей проблемы, но тип литья неправильный. После его назначения, когда вы пытаетесь получить доступ к методу NSMutable, он получит сбой.

+0

Спасибо! Можете ли вы вкратце объяснить, почему мне пришлось переопределить NSMutableDictionary? Когда я изначально сохраняю myDictionary в Core Data, он меняет его на NSDictionary? – Paul