2013-02-26 8 views
7

Il codice seguente non elimina l'entità. Il messaggio "elimina ha avuto esito positivo" viene visualizzato sulla console in modo da trovare l'entità. Tutte le altre operazioni che uso riescono.Impossibile eliminare un'entità dai dati principali, utilizzando RestKit 0.20

Sto usando RestKit 0.20.

NSManagedObjectContext *context = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext; 
NSError *error = nil; 

NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity: [NSEntityDescription entityForName:@"Auction" inManagedObjectContext:context]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"AuctionID = %d", auctionID]; 
[fetchRequest setPredicate:predicate]; 

NSArray *result = [context executeFetchRequest:fetchRequest error:&error]; 
if(result.count) { 
    Auction *block = result[0]; 
    [context deleteObject:block]; 
    BOOL status = [context save:&error]; 
    if (status == NO) { 
     NSLog(@"delete falied for AuctionID:%d, error: %@", auctionID, error); 
    } 
    else { 
     [context processPendingChanges]; 
     NSLog(@"delete was successful for AuctionID:%d", auctionID); 

    } 
} 

Perché questa operazione di eliminazione non riesce e qual è la soluzione per farlo funzionare.

+0

Dove vedi l'istanza dopo averla cancellata? –

+0

Sto usando uno strumento di terze parti "Base" nel file * .sqlite nel simulatore. Posso eliminare entità con lo strumento. – zaph

+0

Mi stavo davvero chiedendo quale sia il sintomo del problema e quando lo vedi accadere. Hai detto che stai riscontrando problemi nell'eliminare i dati, quindi quando visualizzi gli elementi che pensavi di aver eliminato? –

risposta

5

ho trovato questa soluzione:

In realtà, è necessario recuperare dati dal persistentstore e non l'attuale contesto creato gestito:

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyModel"]; 
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:NO]; 
fetchRequest.sortDescriptors = @[descriptor]; 

// Setup fetched results 
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                     managedObjectContext:[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext 
                      sectionNameKeyPath:nil 
                        cacheName:nil]; 

// AND TO DELETE A MODEL : 

[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:myobject]; 
+0

Grazie :) Se trovi una soluzione migliore, non esitare a risolverlo. – Sebastien

+0

Questo risolve il problema. Il problema era il contesto, '[RKManagedObjectStore defaultStore] .persistentStoreManagedObjectContext' era la soluzione esatta. – zaph

2

Sto facendo la stessa cosa e ho quasi lo stesso codice. Nel mio codice Inoltre, ho cancellarlo fatto e salvato ....

Ma la sua non è cancellato quando sto controllando DB.

il problema non è con il simulatore ... Sicuramente bcz sto ricevendo lo stesso problema anche sul dispositivo. c'è qualcosa chiamato contesto figlio, potrebbe essere la causa ... Controllare questi collegamenti http://restkit.org/api/0.20.0-dev/Classes/RKManagedObjectRequestOperation.html#//api/name/managedObjectContext RestKit 0.20 — What is the preferred way to create a new NSManagedObject? . Se hai trovato una soluzione pls quota qui

+0

Stesso errore, qualche idea? – Sebastien

+0

Assicurati, ragazzi state controllando Database dopo aver fermato l'app. Perché le modifiche non vengono riflesse a meno che non sia in connessione. Quindi, Elimina -> disconnetti e controlla. Nel mio caso non è stato ancora cancellato dopo averlo controllato in questo modo. E sì, ora sono in grado di cancellarlo in modo esplicito ma è sbagliato, dovrebbe essere cancellato solo dal kit di ripristino. Se qualcuno di voi riceve la risposta di pls di soluzione qui – Sumitiscreative

2

@Sumitiscreative mi sono imbattuto nello stesso numero oggi. Che cosa succede se è stato trovato che normalmente utilizzando Core Data è necessario utilizzare

[NSManagedObject save:] 

per memorizzare le modifiche. Ho scavato attraverso Restkit un po 'e ho trovato questo

[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:(NSManagedObject *)]; 
[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext saveToPersistantStore:(NSError *)]; 

chiamata a questo dopo che il metodo di cancellazione di cui sopra sta lavorando per rimuovere l'oggetto dal DB.

** Edit - Anche io avrebbe appena fatto questo commento, ma non ho la possibilità

1

@Lance Ehi, pls aggiornare il restkit con l'ultima versione. Come ora, questo funziona nella versione più recente, se la configurazione relativa al server è corretta. e se ottieni i codici di successo per la tua richiesta di cancellazione dal server. Quindi, restkit elimina automaticamente i dati.

Se è necessario eliminare tutti i dati esternamente, è possibile utilizzare persistentStoreManagedObjectContext e dopo averlo eliminato, salvarlo.

Inoltre, se si desidera verificare se la cancellazione è corretta tramite restkit o meno. quello che puoi fare è ...

fare richiesta di cancellazione, dopo il successo controllare con lo stesso id, se l'articolo esiste. (solo per aiuto)