Objective c 核心数据不在设备上运行,但在模拟器上运行良好
我正在为我的应用程序使用核心数据。它在模拟器上运行良好,但无法检索真实设备的详细信息。设备为iOS6.1。这是我正在使用的代码:Objective c 核心数据不在设备上运行,但在模拟器上运行良好,objective-c,core-data,nsmanagedobjectmodel,Objective C,Core Data,Nsmanagedobjectmodel,我正在为我的应用程序使用核心数据。它在模拟器上运行良好,但无法检索真实设备的详细信息。设备为iOS6.1。这是我正在使用的代码: - (NSManagedObjectContext *) getCurrentMangedContext { NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"ForceData" withExtension:@"momd"]; NSManagedObjectModel *managed
- (NSManagedObjectContext *) getCurrentMangedContext
{
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"ForceData" withExtension:@"momd"];
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
NSURL *storeURL = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]URLByAppendingPathComponent:@"ForceData.sqlite"];
NSError *error = nil;
NSPersistentStoreCoordinator *persistantStroreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];
if (![persistantStroreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
{
}
NSManagedObjectContext *managedContext = [[NSManagedObjectContext alloc] init] ;
[managedContext setPersistentStoreCoordinator:persistantStroreCoordinator];
modelURL = nil;
return managedContext;
}
这就是我如何保存我的登录详细信息,它没有给出任何错误
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
[request setEntity:entity];
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
if (emailString != nil)
{
[newManagedObject setValue:emailString forKey:@"email"];
}
if (genderString != nil)
{
[newManagedObject setValue:genderString forKey:@"gender"];
}
if (fNameString != nil)
{
[newManagedObject setValue:fNameString forKey:@"firstName"];
}
if (lNameString != nil)
{
[newManagedObject setValue:lNameString forKey:@"lastName"];
}
if (userIDString != nil)
{
[newManagedObject setValue:userIDString forKey:@"userID"];
}
NSError *error = nil;
if (![context save:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
// Insert User details to the user DB <--------------------------
但我不是在设备上获取用户详细信息,而是在模拟器上获取。有人面临同样的问题吗?在您的情况下,我建议ARC在执行提取请求后释放您的
managedObjectContext
确保您在应用程序的整个managedObject
生命周期内(例如,您的applicationelegate
)的某个地方持有对相应managedObject上下文的strong
引用。NSManagedObject
不能离开它的managedObjectContext。核心数据项目模板展示了如何做到这一点
关于ARC和强引用的更多信息:您能否发布NSLog(@“%@”,objUser)的输出代码>。顺便说一句:请不要在getter方法前面加上get
。按照惯例,简单地-(User*)activeUser
:您进行了哪些调试?至少记录每个方法返回的错误…@FlorianMielke感谢您提供的信息。我在objUser中得到的是:(实体:用户;id:0x1facde20;数据:)2013-12-14 18:31:31.811 ForcePack 1.3[3851:7607](实体:用户;id:0x1faccb70;数据:)我建议关联的托管对象上下文不再可用。请尝试将托管对象上下文分配给适当的属性。没有托管对象上下文的存在,托管对象就无法生存。非常感谢,老兄……这件简单的事情偷走了我的时间。我甚至尝试用新数据替换核心数据。:)欢迎光临。在开始使用核心数据时,我也曾多次遇到过这个问题。
- (User *) getActiveUser
{
NSManagedObjectContext *context = [self getCurrentMangedContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
[request setEntity:entity];
NSError *errorFetch = nil;
NSArray *array = [context executeFetchRequest:request error:&errorFetch];
User *objUser = (User *) [array lastObject];
NSLog(@"%@",objUser);
return objUser;
}