Ios 神奇记录芬德尔。。。改为fetchAll。。。;项目重复导致核心数据崩溃?
我正在重写代码,以便我的表视图现在通过标准视图控制器而不是表视图控制器通过委托运行。此外,我从使用MR_findAllSortedBy作为数据源切换到使用MR_fetchAllSortedBy,因为使用此方法可以更轻松地在分组表视图中设置节 首先,我要指出,在描述上述两种MagicalRecord操作之间差异的文档中,我没有找到太多内容,除了MR_findAll方法返回数组与MR_fetchAll方法返回的FetchedResultsController 我遇到的问题是,除了绿色和对这些东西普遍感到紧张外,当我在添加新列表项后单击“保存”按钮时,应用程序将退出,并显示以下消息: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+entityForName:nil不是合法的NSManagedObjectContext参数搜索实体名称”ListActivity 下面是Save方法的代码:Ios 神奇记录芬德尔。。。改为fetchAll。。。;项目重复导致核心数据崩溃?,ios,uitableview,core-data,magicalrecord,Ios,Uitableview,Core Data,Magicalrecord,我正在重写代码,以便我的表视图现在通过标准视图控制器而不是表视图控制器通过委托运行。此外,我从使用MR_findAllSortedBy作为数据源切换到使用MR_fetchAllSortedBy,因为使用此方法可以更轻松地在分组表视图中设置节 首先,我要指出,在描述上述两种MagicalRecord操作之间差异的文档中,我没有找到太多内容,除了MR_findAll方法返回数组与MR_fetchAll方法返回的FetchedResultsController 我遇到的问题是,除了绿色和对这些东西普遍
- (IBAction)saveButton:(UIBarButtonItem *)sender
{
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
ListActivity * thisActivity = [ListActivity MR_createInContext:localContext];
thisActivity.activityName = self.activityField.text;
thisActivity.activityCategory = self.categoryField.text;
[localContext MR_saveToPersistentStoreAndWait];
//Inform app
[[NSNotificationCenter defaultCenter] postNotificationName:@"newActivityAdded" object:nil];
//dismiss view
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
我决不是专家,甚至不是合格的调试器,但问题似乎出在NSManagedObject+MagicalRecord.m文件中的这段代码中:
+ (NSString *) MR_bestGuessAtAnEntityName
{
if ([self respondsToSelector:@selector(entityName)])
{
return [self performSelector:@selector(entityName)];
}
return NSStringFromClass(self);
}
+ (NSEntityDescription *) MR_entityDescriptionInContext:(NSManagedObjectContext *)context
{
NSString *entityName = [self MR_bestGuessAtAnEntityName];
return [NSEntityDescription entityForName:entityName inManagedObjectContext:context];
}
+ (NSEntityDescription *) MR_entityDescription
{
return [self MR_entityDescriptionInContext:[NSManagedObjectContext MR_contextForCurrentThread]];
}
以下是我对MagicalRecord/CoreData堆栈的设置:
在AppDelegate.m中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[MagicalRecord setupCoreDataStackWithStoreNamed:@"MRExample2.sqlite"];
return YES;
}
…和
- (void)applicationWillTerminate:(UIApplication *)application
{
[MagicalRecord cleanUp];
}
以下是HomeViewController.m文件中的整个enchilada表视图委托:
#import "HomeViewController.h"
#import "ListActivity.h"
#import "AddActivityViewController.h"
@interface HomeViewController ()
@end
@implementation HomeViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationNewActivityAdded:) name:@"newActivityAdded" object:nil];
[self refreshData];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void) notificationNewActivityAdded:(NSNotification*)notification
{
[self refreshData];
}
#pragma mark tableview delegate stuff
#pragma mark tableview data source stuff
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[self.frc sections] count];
}
-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.frc sections] objectAtIndex:section];
return [sectionInfo name];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id<NSFetchedResultsSectionInfo> sectionInfo = [[self.frc sections] objectAtIndex:section];
int rows = [sectionInfo numberOfObjects];
return rows;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
ListActivity *activity = [self.frc objectAtIndexPath:indexPath];
cell.textLabel.text = activity.activityName;
return cell;
}
-(void) refreshData
{
self.frc = [ListActivity MR_fetchAllSortedBy:@"activityName" ascending:YES withPredicate:nil groupBy:@"activityCategory" delegate:nil inContext:self.moc];
}
@end
另外,确实有一个名为ListActivity的实体,我重新生成了子类文件以确保它们被识别
抱歉,篇幅太长了,但我想尽可能清楚地描述这个问题
为了澄清我的问题:
1为什么MR/CD找不到实体列表活动
2有人能在我的代码中发现任何白痴吗
3最后,如果有人知道哪里有一个tut或文档,给出了一个方法一个方法的比较,演示了何时以及如何选择哪种确切的MR方法,我一定会很感激。并不是因为缺乏努力,我才空手而归。在过去的两天里,我确实在SO和网络上做了几十次搜索,但似乎没有太多。可惜,因为MR是一个如此强大、干净的CD接口
哦,当我的问题有答案时,有可能通过电子邮件通知我吗?我已经注册了我的电子邮件地址,我想我明白这会解决它,但我发现我必须手动返回我的问题页面,看看是否有人回答了
非常感谢