2016-07-04 3 views
-1

Я попытался этим решением, которое я нашел здесь, но он не работает, и я получаю эту ошибку:Как NSData для NSDictionary?

(*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObject initWithCoder:]: unrecognized selector sent to instance 0x7fb7286f36c0')

Я спасаю NSDictionary данных Ключевых после преобразования его в NSData тогда мой FETCH выглядит так.

let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
     let context :NSManagedObjectContext = appDel.managedObjectContext 
    let noteDict = NSFetchRequest(entityName: "NoteDictionary") 
       noteDict.returnsObjectsAsFaults = false 


      let dicResults : NSArray 
      try! dicResults = context.executeFetchRequest(noteDict) 

      var tempData:NSData 
       tempData = NSKeyedArchiver.archivedDataWithRootObject(dicResults) 

      let tempString = NSString(data: tempData, encoding: NSUTF8StringEncoding) 
      let unArchDictionary : NSDictionary? = NSKeyedUnarchiver.unarchiveObjectWithData(tempData)! as? NSDictionary 

это происходит сбой на let unArchDictionary ... Любая помощь, пожалуйста !!

JZ

+0

Привет, я думал, что эта линия разархивировав объект? вынул! все еще падает. let unArchDictionary: NSDictionary? = NSKeyedUnarchiver.unarchiveObjectWithData (tempData) как? NSDictionary –

+0

Вы не сделали то, что я сказал! Вы достали восклицательный знак, но вы не вытащили «NSDictionary?», Как я вам сказал. Вот почему ты все еще рушишься. См. Мой ответ ниже. – matt

+0

Спасибо Мэтту, я видел, что после и исправил проблему, также опубликовал другое решение. –

ответ

1

Рассмотрите свой собственный код:

let dicResults : NSArray // dicResults is an array 
// ... 
var tempData:NSData // tempData is an NSData 
tempData = NSKeyedArchiver.archivedDataWithRootObject(dicResults) 
// so tempData is an array archived into an NSData 
// ... 
let unArchDictionary : NSDictionary? = 
    NSKeyedUnarchiver.unarchiveObjectWithData(tempData)! as? NSDictionary 
// now you are unarchiving tempData as a dictionary?! 

Как вы планируете положить NSArray в архив и все же получить NSDictionary из одного и того же архива?

+0

Хорошо, получите свою точку зрения. –

+1

Вы задали 18 вопросов, но только один раз вы ответили. Это плохое поведение при переполнении стека. Люди не захотят вам помочь, если вы не примете их ответов. Если вы не получили приемлемого ответа, вы должны изменить свой вопрос, чтобы быть лучше. Если вы получили приемлемый ответ, вы должны принять его (галочка). – matt

+0

+1 Кроме того, кто-то, кто ищет решение для подобной проблемы, увидит Q с не принятым ответом. –

0

Хорошо, что я сделал проверку, проверяя, когда кто-то помог мне. Однако я решил свою проблему.

Если вы хотите сохранить NSMutableDictionary в основных данных и получить его здесь решение .. FYI я использую трансформируемой для моего Attribute .. Сохранение в основных данных .... // Настройка ManagedObjectContext

let appDel : AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
    let context:NSManagedObjectContext = appDel.managedObjectContext 

    let dict = NSEntityDescription.insertNewObjectForEntityForName("NoteDictionary", inManagedObjectContext: context) 

let tempNote = self.noteField!.text as NSString 
noteDictionary.setObject(tempNote, forKey: dicKey) 

[dict .setValue(noteDictionary, forKey: "dictionary")] 

// print("The Note Dictionary has this in it ",noteDictionary) 

do { 
    try context.save() 
    print("The Note That Was Saved is ",dict) 
} catch { 
    print(error) 
} 

Теперь Извлечение из основных данных

func showLabel() { 

let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
let context :NSManagedObjectContext = appDel.managedObjectContext 
let noteDict = NSFetchRequest(entityName: "NoteDictionary") 
noteDict.returnsObjectsAsFaults = false 

let dicResults : NSArray 
try! dicResults = context.executeFetchRequest(noteDict) 

    for context in dicResults { 
     noteDictionary = context.valueForKey("dictionary")as! NSMutableDictionary 
     noteField?.text = noteDictionary.valueForKey(dicKey as String)as? String 
    } 
} 
Смежные вопросы