将UITableViewCell信息存储到core data中,不需要segue xcode 5



我有一个TableViewController和一个可以展开的UITableViewCell。当它被扩展时,我想保存用UIBarButtonItem设置的数据,所以这个按钮会调用保存的方法。我试着把它保存在我的ViewController实现文件中但我总是得到一个错误说:

'NSInvalidArgumentException', reason: 'Cannot create an NSPersistentStoreCoordinator with a nil model'

我从另一个项目复制了所有必要的代码到我的AppDelegate实现文件,这只是一个使用core data的基本项目。我还制作了xdatamodeld文件,其中包含一个Alarm实体和七个属性。我还为实体创建了一个NSManagedObject类。此外,我有一个AlarmCell,我在其中设置UITableViewCell属性。

我ViewController。M代码为:

- (IBAction)optionSet:(UIBarButtonItem *)sender
{
  if ([_alarmOperation.title isEqual:@"Save"])
  {
      [self saveTheAlarmFinally];
  }
}
BOOL monSet, tueSet, wedSet, thuSet, friSet, satSet, sunSet;
- (void) saveTheAlarmFinally
{
AlarmCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AlarmCell"];
if (cell.mon.tintColor == RGB(0, 204, 102))
{
    monSet = YES;
}
else
{
    monSet = NO;
}
if (cell.tue.tintColor == RGB(0, 204, 102))
{
    tueSet = YES;
}
else
{
    tueSet = NO;
}
if (cell.wed.tintColor == RGB(0, 204, 102))
{
    wedSet = YES;
}
else
{
    wedSet = NO;
}
if (cell.thu.tintColor == RGB(0, 204, 102))
{
    thuSet = YES;
}
else
{
    thuSet = NO;
}
if (cell.fri.tintColor == RGB(0, 204, 102))
{
    friSet = YES;
}
else
{
    friSet = NO;
}
if (cell.sat.tintColor == RGB(0, 204, 102))
{
    satSet = YES;
}
else
{
    satSet = NO;
}
if (cell.sun.tintColor == RGB(0, 204, 102))
{
    sunSet = YES;
}
else
{
    sunSet = NO;
}    
[self createNewAlarmWithMonday:monSet Tuesday:tueSet Wednesday:wedSet Thursday:thuSet Friday:friSet Saturday:satSet Sunday:sunSet];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Alarm"];
NSError *requestError = nil;
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSArray *alarms = [[appDelegate managedObjectContext] executeFetchRequest:fetchRequest error:&requestError];
}
- (BOOL) createNewAlarmWithMonday:(BOOL)paramMonday
                       Tuesday:(BOOL)paramTuesday
                       Wednesday:(BOOL)paramWednesday
                       Thursday:(BOOL)paramThursday
                       Friday:(BOOL)paramFriday
                       Saturday:(BOOL)paramSaturday
                       Sunday:(BOOL)paramSunday                   
{
BOOL result = NO;
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];

Alarm *newAlarm = [NSEntityDescription insertNewObjectForEntityForName:@"Alarm" inManagedObjectContext:[appDelegate managedObjectContext]];
if (newAlarm == nil)
{
    NSLog(@"Failed to create the new alarm.");
    return NO;
}
newAlarm.monday = [NSNumber numberWithBool:paramMonday];
newAlarm.tuesday = [NSNumber numberWithBool:paramTuesday];
newAlarm.wednesday = [NSNumber numberWithBool:paramWednesday];
newAlarm.thursday = [NSNumber numberWithBool:paramThursday];
newAlarm.friday = [NSNumber numberWithBool:paramFriday];
newAlarm.saturday = [NSNumber numberWithBool:paramSaturday];
newAlarm.sunday = [NSNumber numberWithBool:paramSunday];
NSError *savingError = nil;
if ([self.managedObjectContext save:&savingError])
{
    return YES;
}
else
{
    NSLog(@"Failed to save the new alarm. Error = %@", savingError);
}
return result;
}

你的想法是错误的。你不应该调用dequeueReusableCellWithIdentifier: on保存方法-这应该只在表视图想要显示单元格时调用。此外,单元格不应该存储任何数据,它们应该只通知控制器有关更改,控制器应该知道如何处理单元格动作。或者单元应该有模型(警报)与其关联并直接修改它。通过比较它的颜色来检查单元格状态也是错误的(颜色可能会改变,你的代码将停止工作)。

关于NSPersistentStoreCoordinator的错误,我看到你正在用[appDelegate managedObjectContext]插入对象,然后用self.managedObjectContext保存它-也许,第二个初始化不正确-没有设置持久存储?

最新更新