Core Dati Trasformabile Vs Binary Options


Con un attributo binario, di leggere e scrivere i casi di NSData direttamente. Con un attributo trasformabile, di leggere e scrivere le istanze di qualsiasi classe che può essere convertito da e per NSData. La memorizzazione dei dati attuale è la stessa con un attributo binario, ma Core Data utilizza un NSValueTransformer per convertire tofrom NSData quando necessario. Ad esempio, dire il vostro oggetto gestito ha un attributo immagine dove sarebbe conveniente per leggere e scrivere direttamente UIImage. Tranne, UIImage cant essere salvato in Core Data. Ma UIImage può essere convertito da e per NSData. Quindi, se si è utilizzato un attributo trasformabile si poteva leggere e scrivere UIImage pur mantenendo NSData nell'archivio dati. risposto 10 Gennaio 13 ad 18:43 Tom, Sarebbero i dati trasformabili mantenere lo stesso comportamento per quanto riguarda NSData di archiviazione esterna (anche se, il consentire l'archiviazione esterna non è esplicitamente nell'interfaccia utente, o sarebbero macchie iniziano ad apparire sul Data Store Core) La documentazione non indica con precisione che l'attributo trasformabile verrà salvato un record esterno o le regole che verranno applicate. Puoi condividere la tua esperienza ndash Tommie C. 13 settembre 15 alle 2:19 Esattamente ho la stessa domanda. Non esiste una opzione nel trasformabile tipo di attributo da memorizzare in quotExternal Storagequot. E 'questo di default acceso o cosa ndash Marcin Kapusta 26 febbraio 16 a 16: 02When salvataggio di NSArray a un attributo trasformabile Core Data, l'oggetto non sarà disponibile per l'accesso alla successiva operazione di recupero della sua entità. Tuttavia, è disponibile su qualsiasi operazione di recupero dopo. Cosa sta succedendo posso impostare e salvare l'entità Core Data e dei suoi attributi da un luogo della mia app iOS. Poi vado a leggere l'entità salvato più di recente. Tutti gli attributi tranne le NSArrays trasformabili sono disponibili. Per qualche motivo gli array vengono visualizzati come vuota (quando stampato nel registro sembra che questo:.. Percorso (n) Se l'applicazione si chiude e poi si riapre, l'attributo non è più vuota Tutte le idee ho capito che il salvataggio di un NSArray a un attributo trasformabile, non è la migliore pratica. ci può spiegare il motivo per cui questo accade la NSArray è pieno di oggetti CLLocation. non ci sono errori o avvisi stampati nella console. Né sono i loro eventuali avvisi del compilatore o errori. di seguito è riportato un XCTest ho scritto per questo problema. il test non manca fino all'ultimo asserzione (come previsto). come potete vedere qui sotto, questo è come il modello core Data è configurato in Xcode. viene selezionata la attributo di percorso. si noti che ho provato sia con ... e senza la proprietà transitoria ho bisogno di aggiungere un valore Transformer Nome cosa è che il codice di gestione core Data in sé viene dal mio repo GitHub, SSCoreDataManger (che funziona bene a mia conoscenza) Ecco il metodo saveNewRunWithDate: e sotto è il RunDataModel NSManagedObject interfaccia: per l'attuazione di queste proprietà sono installati attraverso la dinamica un attributo entità trasformabile è quella che passa attraverso un'istanza di NSValueTransformer. Il nome della classe NSValueTransformer da utilizzare per un particolare attributo è impostato nel modello oggetto gestito. Quando Core Data accede ai dati degli attributi chiamerà NSValueTransformer valueTransformerForName: per ottenere un'istanza del trasformatore di valore. Utilizzando tale valore trasformatore il NSData persisteva nel negozio per l'entità sarà trasformata in un valore di oggetto si accede tramite una proprietà dell'istanza oggetto gestito. Si può leggere di più su questo nel nucleo dati di programmazione sezione di guida non-standard persistenti attributi di default Core Data utilizza il trasformatore valore registrato per il nome NSKeyedUnarchiveFromDataTransformerName e lo utilizza in senso inverso per eseguire la trasformazione. Questo avverrà se nessun nome trasformatore valore è stato specificato nel Core Data Editor modelli, ed è generalmente il comportamento desiderato. Se si desidera utilizzare un diverso NSValueTransformer è necessario registrare il proprio nome nella propria applicazione chiamando NSValueTransformer setValueTransformer: forName: e impostare il nome della stringa nell'editor modello (o in codice, che è un altro discorso). Tenete a mente il trasformatore valore utilizzato deve supportare sia in avanti e la trasformazione inversa. Il trasformatore valore predefinito può trasformare qualsiasi oggetto che supporta l'archiviazione a chiave in NSData. Nel tuo caso, si dispone di un NSArray (in realtà, un NSMutableArray. Che non è buono). NSArray supporta NSCoding. ma fin dalla sua una raccolta degli oggetti contenuti all'interno deve sostenerla così - altrimenti non possono essere archiviati. Per fortuna, CLLocation supporta NSSecureCoding. una più recente variante di NSCoding. È possibile verificare la trasformazione di un NSArray di utilizzare trasformatore Nucleo Dati CLLocation s facilmente. Per esempio: vi incoraggio a scrivere i test come questi per gli attributi trasformabili. La sua facile fare modifiche alla vostra applicazione che sono incompatibili con il trasformatore di default (come ad esempio l'inserimento di oggetti che non supportano l'archiviazione a chiave). Utilizzando una serie di test come questo io non sono in grado di riprodurre qualsiasi problema con l'archiviazione di un NSArray di CLLocation s. Vi è una parte molto importante della vostra domanda: Per qualche motivo gli array vengono visualizzati come vuota (quando stampato nel registro sembra che questo:. Itinerario (n) Se l'applicazione si chiude e poi si riapre, l'attributo non è più vuota . Tutte le idee Questo indica che (almeno nella vostra applicazione, forse non il test) i dati si sta trasformando e applicata per l'entità nel negozio Quando l'applicazione imposta il valore percorsi, la matrice viene mantenuto al negozio -. sappiamo . questo perché la prossima volta che l'applicazione viene avviata i dati vengono visualizzati in genere questo indica un problema nell'applicazione quando si comunica modifiche tra contesti dal codice che hai postato sembra che si sta utilizzando un unico contesto, e solo dal thread principale. - il vostro Singleton SSCoreDataManager non avrebbe funzionato correttamente altrimenti, e si utilizza il modello di concorrenza filo confinamento obsoleto Allo stesso tempo, ci sono posti SSCoreDataManager sta usando - performBlock:. per accedere al singolo NSManagedObjectContext. performBlock: deve essere utilizzato solo con contesti creati con un tipo di coda concorrenza. Il contesto in uso qui è stato creato con - init. che avvolge appena - initWithConcurrencyType: e passa il NSConfinementConcurrencyType valore. A causa di questo, è sicuramente problemi di concorrenza nel Singleton, che sono molto probabilmente causando alcuni dei comportamenti che si sta vedendo. Si sta rendendo persistente un valore di attributo su un soggetto, ma al più tardi visto che il valore riflette quando la proprietà avvolgendo l'attributo spara un difetto nel contesto oggetto gestito. Se si è in grado di sviluppare con Xcode 6.xe iOS 8, attivare il debug concorrenza Core Data passando l'argomento di lancio per l'applicazione. Questo dovrebbe rendere alcuni dei problemi qui più visibili a te, anche se solo chiamando performBlock: in un contesto creato con - init dovrebbe essere la causa un'eccezione per essere gettato già. Se l'applicazione sta facendo qualcosa di ingoiare eccezioni che possono essere nascosti questo e altri problemi. La sua non è chiaro dalla tua domanda castrato che state vedendo questo solo quando si sta tentando di vie di accesso nel debugger, o se si sta vedendo anche rotto la funzionalità quando lo si utilizza. Quando il debug oggetti gestiti è necessario essere molto consapevoli di quando si sparano un guasto su un valore della proprietà. E 'possibile che in questo caso si sta vedendo un array vuoto nel debugger solo perché si accede in un modo che non è causa di un guasto al fuoco - che sarebbe un comportamento corretto. Dalla tua descrizione di altro comportamento dell'applicazione se sembra possibile che questo è il limite del problema - dopo tutto, i valori vengono persistenti correttamente. Purtroppo la Guida alla programmazione Core Data accenna a malapena quello che un guasto. e lo fa fianco a fianco con uniquing. Ha provocato l'errore è una parte fondamentale di Core Data - la sua maggior parte del punto di usarlo - e non ha quasi nulla a che fare con uniquing. Fortunatamente, alcuni anni fa, la Guida incrementale deposito di programmazione è stato aggiornato con molte intuizioni la struttura interna di Core Data, tra cui fagliazione. Il test e Singleton hanno altri problemi che sono, purtroppo, al di là della portata di questa domanda. Il problema potrebbe essere nel non eliminare il vecchio negozio tra le corse di prova. L'oggetto che tu sei il controllo potrebbe non essere lo stesso oggetto che youve appena aggiunto. Assicurarsi inoltre che la proprietà transitoria non è impostata. attributi transitori non sono persistenti. Heres che cosa potrebbe accadere nelle prove. Ad un certo punto si è creato nuovo correre senza un percorso e salvato. Durante il prossimo test youre la creazione di un altro oggetto corsa con la stessa data DATE01. Invece di controllare la proprietà percorso dell'oggetto youve appena creato, stai facendo l'operazione di recupero scelte per data. Tutti i percorsi hanno la stessa data, quindi l'ordinamento per data doesnt sostanzialmente influenzare i risultati ordinati. Il primo oggetto dei tuoi recuperare i risultati sembra essere un vecchio oggetto in cui si ha ancora imposta la proprietà percorsi. Solo nel caso, registrare il valore di newRun. route all'interno del - saveNewRunWithDate. metodo. risposto 27 Gennaio 15 alla 12:29 quellishs risposta fornisce informazioni sui guasti Core Data e alcune delle sfumature e inganni che in esso si trovano. Dopo aver fatto qualche scavo, e con l'aiuto di quella risposta, ho trovato una soluzione. Prima di andare a prendere l'entità desiderata (problema), aggiornare la NSManagedObject nella NSManagedObjectContext: Questo aggiorna le proprietà persistenti di un oggetto gestito per utilizzare gli ultimi valori dalla memoria permanente. Risulta anche l'oggetto in un guasto. risposto 31 Gennaio 15 alla 19:33 Ho avuto un problema simile a questo, che ho trovato davvero difficile da risolvere. Alla fine ho fatto risolverlo, ma non era la soluzione qui che riparato. Voglio condividere quello che ho trovato lavorato per il bene di tutti di fronte alla stessa sfida come me. Nel mio caso, il problema era perché stavo cercando di utilizzare un NSMutableArray come attributo trasformabile Core Data. Ma ora ho capito che non dovreste farlo. Invece si dovrebbe utilizzare un array immutabile (cioè NSArray) e poi, se avete bisogno di cambiare un valore nella matrice, si copia la matrice Core Data a un array mutabile locale (cioè var NSArray a Swift), rendono la modifica al locale array e quindi eseguire un comando per rendere la matrice core Data uguale al matrice locale cambiato. Quindi salvare Core Data come normale. Come ho detto, il mio problema era simile a quello qui, ma non era la stessa. E così io non sto affermando che questa è la soluzione a questo problema. Sto semplicemente condividendo questo per gli altri beneficiare nel caso in cui questo li aiuta. risposto 19 marzo 16 al 00:23 La vostra risposta 2017 Stack Exchange, IncUsing proprietà trasformabile ampamp dati binari in Core Data: Come sapete Core Data attributi possono avere immobili come indefinito, Integer16, Integer32, Integer64, Float, decimale, data, booleano, String, doppio, dati binari in Objective C ha da offrire. Di tutte queste proprietà dati binari è necessario per essere considerato. Con il supporto di tutte queste proprietà lingua Swift è anche fornendo proprietà trasformabile che è molto interessante importante. A causa di questa proprietà è possibile inserire qualsiasi tipo di dati nei dati fondamentali, senza spese extra. In questo tutorial ho intenzione di mostrare come utilizzare entrambe queste proprietà. (Dati binari ampamp proprietà trasformabile). 1. Come al solito creare un nome dell'applicazione ampamp modello di singoli Vista è ImportantDataTypeInCoreData ampamp scegliere il linguaggio quanto più rapido Lasciando casella Core Data non controllato inseriremo il nostro modello di Core Data in seguito. come mostrato nella immagine qui sotto: 2. Aggiungere una canzone il cui URL memorizzeremo nella urlOfSong attribuiamo creeremo nel modello di breve. 3. Ora che abbiamo un progetto per completare ampamp useremo proprietà Core Data quindi ora creare una classe Cocoa Touch con il nome di persistenza che è sottoclasse di NSObject ampamp poi per l'inclusione del modello clic sulla cartella ImportantDataTypeInCoreData ampamp cliccare su Nuovo - gt file core Data (campo iOS) - gtData nome modello ampamp IT proprietà poi continuare fino a quando non verrà creato come mostrato nella immagine: 4. Ora aprire il modello appena creato ampamp aggiungere un entità denominata UseOfDataTypes con due attributi urlOfSong nome ampamp di tipo ampamp trasformabile dati binari, rispettivamente, mostrato nella seguente immagine: 5. Tenere i UseOfDataTypes entità selezionata stiamo andando a creare una classe NSObject. Fare clic sul ampamp editor di fare clic sull'opzione Crea NSmanagedObject sottoclasse ampamp seguire le istruzioni fino a quando verrà creata la classe con lo stesso nome di entità. NSObject sottoclasse viene creato con il nome stesso un'entità UseOfDataTypes aprirlo ampamp si vedrà qualcosa di simile a quello mostrato nell'immagine di seguito presentato: Come mostrato in attributo questa immagine urlOfSong è di tipo ANYOBJECT perché è di tipo trasformabile ampamp questo deve essere trasformato per quello che abbiamo bisogno di memorizzare in nome core Data ampamp è di tipo NSData perché lo impostiamo a dati binari nel modello. Vai avanti ampamp trasformare la classe in qualche modo mostrato nell'immagine seguente: var managedObjectContext. NSManagedObjectContext. lasciare modelURL NSBundle. mainBundle (). (. WithExtension proprietà: momd) URLForResource lasciare managedObjectModel NSManagedObjectModel (contentsOfURL: modelURL) lasciare storeURL Persistenza. applicationDocumentDirectory. URLByAppendingPathComponent (properties. sqlite) lasciare persistentStoreCoordinator NSPersistentStoreCoordinator (managedObjectModel: managedObjectModel) Errore var. NSError. nil se (persistentStoreCoordinator addPersistentStoreWithType (NSSQLiteStoreType configurazione:... nil URL: storeURL, opzioni:. nil errore: amperror) nil) lasciare managedObjectContext NSManagedObjectContext () managedObjectContext. persistentStoreCoordinator persistentStoreCoordinator Qui in quanto sopra indicato codice tutto quello che stiamo facendo è solo ottenere il percorso dove memorizzare il modello che abbiamo creato chiamato come properties. xcdatamodeld ampamp creando poi la persistenza coordinatore negozio ampamp ManagedObjectModel ampamp contesto. ------ Gtgtgtgtgtgt Ora abbiamo impostato tutto aggiungere seguente codice Persistence. Swift file per la memorizzazione di oggetti di Core Data: lasciare ANYOBJECT NSEntityDescription. insertNewObjectForEntityForName (. UseOfDataTypes inManagedObjectContext: managedObjectContext) come. UseOfDataTypes lasciare percorso NSURL (fileURLWithPath:. NSBundle mainBundle () pathForResource (Pooja OfType:.. Mp3)) anyObject. urlOfSong percorso come NSURL var archievedName NSKeyedArchiver. archivedDataWithRootObject (Nome) archiviazione dei dati da memorizzare nella Core Data per l'attributo dati binari

Comments

Popular posts from this blog

Binary Opzioni Quotidiano Previsioni Per Pesci

Forex Hacked Pro Ea Download

Forex Abc Strategy