【问题标题】:data: <fault> when return fetch request objects from methoddata: <fault> 从方法返回获取请求对象时
【发布时间】:2012-12-23 07:09:17
【问题描述】:

当我将我的应用程序转换为新技术 ARC(自动引用计数)时,当我从 CoreData 获取时出现了错误。以下是我的方法并呼吁它:

NSArray *userinfo =[self checkData:self.username];

//This return fault data in array
-(NSArray*) checkData:(NSString*)loginUsername{
  id appDelegate = (id)[[UIApplication sharedApplication] delegate]; 

  NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
  [managedObjectContext setPersistentStoreCoordinator:[[appDelegate managedObjectContext] persistentStoreCoordinator]];

  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  NSEntityDescription *userEntity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:managedObjectContext];

  [request setEntity:userEntity];
  [request setPredicate:[NSPredicate predicateWithFormat:@"userName == %@",loginUsername ]];
  NSError *error;

  NSArray *userInfo =[managedObjectContext executeFetchRequest:request error:&error];
  //NSLog(@"Number of account%@",[userInfo valueForKey:@"userName"]);

  if ([userInfo valueForKey:@"userName"] != nil && userInfo.count != 0)
    return userInfo;
  else return nil;
}

这是崩溃日志:

<User: 0x12b73db0> (entity: User; id: 0x12b6dc20 <x-coredata://7388F0B7-E583-4BF0-BE64-08AD014EC583/User/p2> ; data: <fault>)
2012-12-23 10:09:18.802 test[78839:c07] -[NSNull isEqualToString:]: unrecognized selector sent to instance 0x28ac678
2012-12-23 10:09:18.803 test[78839:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x28ac678'
*** First throw call stack:
(0x277b012 0x2018e7e 0x28064bd 0x276abbc 0x276a94e 0xb4028 0x3e3be 0x1812e59 0x1810f22 0x181216a 0x1810edd 0x1811055 0x175e338 0x5d3a81 0x5d2d33 0x610e3a 0x271d8fd 0x6114bc 0x611435 0x4fb3a0 0x26fef3f 0x26fea39 0x2721734 0x2720f44 0x2720e1b 0x31027e3 0x3102668 0xc5465c 0x2806 0x2735 0x1)
libc++abi.dylib: terminate called throwing an exception

【问题讨论】:

  • 请出示您的崩溃日志。
  • 我已经用崩溃日志更新了我的问题
  • 试试我先给出的代码 :)

标签: iphone ios core-data nsmanagedobject


【解决方案1】:

尝试使用您的 AppDelegate 的 managedObjectContext:

所以替换

id appDelegate = (id)[[UIApplication sharedApplication] delegate]; 

NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:[[appDelegate managedObjectContext] persistentStoreCoordinator]];

NSManagedObjectContext *managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

【讨论】:

  • 获取我的语法错误(选择器'managedObjectContext'没有已知的实例方法
  • @wod,添加(AppDelegate *)
  • 你的意思是我在 (AppDelegate *) 中的应用程序委托可以吗
  • @wod 看看我的答案的新版本。 AppDelegate 是您项目的主要委托方法。也可能是&lt;Proj&gt;Delegate
  • @wod 不客气。因为创建managedObjectContext(moc) 并不像你做的那么容易。你可以看看你的AppDelegate.m 文件,你就会知道如何创建一个。但一般来说,最好使用一个mod。在一个班级中使用单独的mod 不是一个好主意。多个mocs 可能相互冲突。在您的情况下,我认为您创建的 moc 没有持久存储(尽管您似乎将其分配给)。
【解决方案2】:

崩溃日志似乎说loginUsername 为零。无论如何,您最好在尝试使用它之前检查它是否确实存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 2021-08-03
    • 2019-05-14
    • 1970-01-01
    • 2019-03-12
    • 2019-01-04
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多