【问题标题】:App crash on using NSPredicate in iphone App?在 iphone App 中使用 NSPredicate 时应用程序崩溃?
【发布时间】:2012-07-03 07:22:07
【问题描述】:

当我在从 Coredata 实体获取唯一用户数据时使用 NSPredicate 时,应用程序会崩溃。但是,没有错误日志。这是正在使用的代码,

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
}


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Name==%@",selectedUserName];  
NSFetchRequest *fectchreq = [[NSFetchRequest alloc] init];
NSEntityDescription *entitydes = [NSEntityDescription entityForName:@"ALLData" inManagedObjectContext:managedObjectContext];
[fectchreq setEntity:entitydes];
[fectchreq setPredicate:predicate];

NSSortDescriptor *sortdes = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES];
NSArray *sortdesarray = [[NSArray alloc] initWithObjects:sortdes, nil];
[fectchreq setSortDescriptors:sortdesarray];
[sortdes release];
[sortdesarray release];   
NSError *error = nil; 
//NSMutableArray *storeddata = [[[managedObjectContext executeFetchRequest:fectchreq] error:&error] mutableCopy];
NSArray *storeddata = [managedObjectContext executeFetchRequest:fectchreq error:&error];
//[fectchreq release];
NSLog(@"StoreData : %@, count : %d",storeddata, [storeddata count]);

谁能帮忙解决这个问题?提前致谢。

【问题讨论】:

  • executeFetchRequest:error: 的第二个参数是指向错误对象的指针。您应该像这样使用&符号传递它:... executeFetchRequest:request error:&error].
  • @Eimantas 是的,我已经在我的代码中尝试过你的话。应用程序仍然崩溃。你能帮我么?谢谢。

标签: iphone ios core-data nspredicate nsfetchrequest


【解决方案1】:
NSError *error; 
NSMutableArray *storeddata = [managedObjectContext executeFetchRequest:fectchreq error:error];

您需要将此代码更改为:

NSError *error = nil;
NSArray *storeddata = [managedObjectContext executeFetchRequest:fectchreq error:&error];

原因: 错误参数应该作为指针传递,因为声明是-executeFetchRequest:(NSFetchedRequest *)request error:(NSError **)error; 此方法还返回NSArray,而不是NSMutableArray - 您一定会收到关于此的编译器警告...

【讨论】:

  • 是的,我已按照您的建议更改了代码。应用程序仍然在 executeFetchRequest: 行中崩溃。请你帮助我好吗?我将发布有问题的最新代码。谢谢。
  • 日志中没有错误。当应用程序到达 executeFetchRequest: 行时,应用程序崩溃了。没有错误日志。你能帮我么?谢谢。
  • 如果不给我一些错误,就无法帮助您。而且你不可能没有错误,至少你应该看到一个开始的信号......发布的代码是正确的。
  • 是的,发布的代码目前正在处理中。 sharedlibrary apply-load-rules all (gdb) 这只是我的日志。请帮我。谢谢。
  • 是的,非常感谢 Graver 先生。真的这是我的错误。我在 NSPredicate 中输入了错误的列名。非常感谢您的帮助。
猜你喜欢
  • 2011-06-20
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
相关资源
最近更新 更多