2017-06-13 6 views
1

Ich verwende eine Singleton-Klasse, um Daten aus CoreData auszuwählen und an den aufrufenden ViewController zurückzusenden. Mein Problem ist, dass beim Abrufen einer der Eigenschaften von ManagedObject die Anwendung mit einer EXC_BAD_ACCESS-Ausnahme abstürzt.Empfangen von EXC_BAD_ACCESS Ausnahme

Dies scheint nur auf iOS 9.x oder im Simulator zu passieren, ist aber ziemlich konsistent. Es ist nicht auf einem Gerät passiert 10.x. Ich habe die Regelung Diagnose Zombie Objekte zu zeigen, und bin jetzt mit dem folgenden Fehler dargestellt:

-[CFString copy]: message sent to deallocated instance 0x15b92990 

Das Problem ist, dass die Zeichenfolge wird auf einem Objekt verwiesen wird, ist direkt abgerufen, bevor ich diesen Fehler, und ich bin mit Swift (also keine manuelle Freigabe von irgendetwas), deshalb verstehe ich nicht, warum es freigegeben wird.

Der Code, der das Objekt wählt wie folgt aussieht:

func getModelTypePrice(mmCode: String, year: Int) -> ModelTypePrice? { 
    let request = NSFetchRequest<ModelTypePrice>(entityName: "ModelTypePrice") 
    request.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [NSPredicate(format: "mmcode = %@", mmCode), 
                     NSPredicate(format: "reg_year = %d", year)]) 
    do { 
     let prices = try managedContext.fetch(request) 
     if prices.count == 1 { 
      return prices[0] 
     } 
    } catch { 
     print("Error selecting object: \(error)") 
    } 
    return nil 
} 

, die aus dem Viewcontroller genannt wird, und wie folgt verwendet:

if let price = LibraryAPI.sharedInstance.getModelTypePrice(mmCode: "123", year: 2017) { 
    self.newPrice = price.new_price // Error happens here. 
} 

Der Viewcontroller hat eine optionale String-Eigenschaft haben newprice genannt . Die new_price-Eigenschaft in einem ModelTypePrice ist auch eine optionale Zeichenfolge. Ich bin hier ein wenig verloren, so dass jeder Rat oder Vorschläge geschätzt werden würde.

+0

was ist der Preiswert? –

+0

In GetModelTypePrice, wenn ich es vor der Rückkehr ausdrucken, bekomme ich folgendes: 'Preise [0] .new_price: Optional (" 369737 ")' – James

+0

Versuchen Sie das ... self.newPrice = prices.new_price! – Bala

Antwort

1

Dieses es fest: [CFNumber release]: message sent to deallocated instance

Das Problem mit new beginnen die Namen der Eigenschaft des verwalteten Objekt war (es war new_price). Ändern Sie es in price_new behoben. Offenbar haben sie geändert, wie dies in iOS 10.x gehandhabt wird, da es dort nie ein Problem gab.

Vielleicht spart dies jemand anderen etwas Frustration.