2013-07-12 4 views
5

Mam dwie metody,Dlaczego CoreData wraca zerowej tablicę a ja wstawienie wartości w tabeli

W pierwszej metodzie, mam zapisać wartości w danych Core, podczas gdy w innych, po prostu sprowadzić je.

Po wstawieniu, podczas pobierania danych w tej samej metodzie, pokazuje wartość, ale gdy próbuję pobrać w inny sposób, zwraca mi wartość null.

Moja oszczędność Metoda jest

-(void) saveloginData:(NSString *)facebookTok username:(NSString *)userName password:(NSString*)password flag:(NSString *)flag { 


NSError *error; 

NSManagedObjectContext *context = [self managedObjectContext]; 



NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:[NSEntityDescription entityForName:@"SignIn" inManagedObjectContext:context]]; 
[fetchRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID 

NSString *facebookTokenData = facebookTok; 
NSString *usernameData = userName; 
NSString *passwordData = password; 
NSString *flagData = flag; 


NSLog(@"Facebook Token%@\nUsername%@\npassword%@\nflat%@\n",facebookTokenData,usernameData,passwordData,flagData); 


SignIn *signIn = [NSEntityDescription 
             insertNewObjectForEntityForName:@"SignIn" 
             inManagedObjectContext:context]; 

signIn.facebookToken = facebookTokenData; 
signIn.username = usernameData; 
signIn.password = passwordData; 
signIn.flag = flagData; 


NSEntityDescription *entity = [NSEntityDescription entityForName:@"SignIn" 
              inManagedObjectContext:context]; 

[fetchRequest setEntity:entity]; 

NSArray *fetchedArray = [context executeFetchRequest:fetchRequest error:&error]; 


for (SignIn *info in fetchedArray) { 
      \\ THis executes and shows values, proves that value are inserted. 

    NSLog(@"Name ~~~~ : %@", info.username); 
    NSLog(@"Password ~~~~~~~~ :%@", info.password); 
    NSLog(@"FLAG ~~~~~~~~~~~ %@",info.flag); 
    NSLog(@"Facebook Token %@", info.facebookToken); 
} 
} 

Moja odzyskać Metoda jest

-(NSArray*) getLoginData { 

NSError *error; 

NSManagedObjectContext *context = [self managedObjectContext]; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

NSEntityDescription *entity = [NSEntityDescription entityForName:@"SignIn" 
              inManagedObjectContext:context]; 


[fetchRequest setEntity:entity]; 

NSArray *fetchedData = [[NSArray alloc] init]; 


fetchedData = [context executeFetchRequest:fetchRequest error:&error]; 

NSLog(@"The count of Array %d", [fetchedData count]); \\ HERE COUNT IS ZERO, WHY? 


for (SignIn *info in fetchedData) { 
    NSLog(@" FF Name ~~~~ : %@", info.username); 
    NSLog(@"Password ~~~~~~~~ :%@", info.password); 
    NSLog(@"FLAG ~~~~~~~~~~~ %@",info.flag); 
    NSLog(@"Facebook Token %@", info.facebookToken); 
} 


return fetchedData; 
} 

proszę kierować że gdzie robię błąd.

+0

Czy udało kontekst obiektu taka sama w obu metodach? –

Odpowiedz

4

Twój problem polega na tym, że musisz zapisać tekst, aby otrzymać encję później.

NSManagedObjectContext save: Próby zatwierdzenia niezapisanych zmian zarejestrowanych obiektów w ich magazynie trwałym.

- (BOOL)save:(NSError **)error 

Parametry: error: wskaźnik do obiektu NSError. Nie musisz tworzyć obiektu NSError. Operacja składowania zostaje przerwana po pierwszym niepowodzeniu, jeśli zdasz NULL.

Wartość zwracana YES, jeśli zapis się powiedzie, w przeciwnym wypadku: NO.

Więc trzeba zapisać kontekst po zmodyfikować obiekt:

signIn.facebookToken = facebookTokenData; 
signIn.username = usernameData; 
signIn.password = passwordData; 
signIn.flag = flagData; 

[context save:NULL]; // NULL if you don't need to handle error 
+0

pracował dla mnie, ale jedno, chcę zapytać, w związku z tym ... – Duaan

+0

Zaakceptowałem drodzy, Dziękuję bardzo za pomoc mi :) – Duaan