2013-07-12 57 views
5

插入值,我有两个方法,为什么coredata被返回空数组,而我在表

在第一种方法,我不救价值观核心数据,而在其他的,我只是获取它们。

插入后,当我在同一个方法中获取数据时,它显示值,但是当我尝试在其他方法中获取数据时,如果返回空值。

我的储蓄方法是

-(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); 
} 
} 

我的检索方法是

-(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; 
} 

请指导说,我现在做的错误。

+0

是管理对象范围内这两种方法一样吗? –

回答

4

您的问题是,您需要保存conext以便稍后获取实体。

NSManagedObjectContext save:尝试将未保存的更改提交到已注册对象的持久性存储中。

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

参数:error:一个指向NSError对象。您不需要创建一个NSError对象。如果您通过NULL,保存操作将在第一次失败后中止。

返回值YES如果保存成功,否则NO

所以,你需要保存上下文您修改对象之后:

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

为我工作,但有一件事,我想问,关于这个... – Duaan

+0

我接受亲爱的,非常感谢帮助我:) – Duaan

相关问题