0

我有一个程序从程序中获取Core Data,然后在程序中获取某些内容,它会在我的UITableView.

现在我的问题是,有时我需要用户向UITableCell我添加另一个,UITableView但我tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section计算了包含我的ExerciseData实体的数组中的元素。

我试图创建一个ExerciseData实体,就好像它是一个对象一样,但这不起作用并使程序崩溃。通过做

 if ([[_ed objectAtIndex:indexPath.row] weight]) {
            NSLog(@"%@",_ed);
             cell.weightInput.text = [NSString stringWithFormat:@"%@",[[_ed objectAtIndex:indexPath.row] weight]];
        }

它引发的错误CoreData: error: Failed to call designated initializer on NSManagedObject class 'ExerciseData'让我明白我无法像这样启动 CD 实体。

然后我尝试添加到NSArray _edaNSString然后检查类,如果它class type是一个类,NSString它不应该尝试设置 cell.weightInput.text

我的问题是 2: 1) 有没有办法启动一个实体,以便我可以将它插入到数组中,然后检查它是否为空,以便稍后我可以验证它if statement

如果那是不可能的 2) 我如何NSArray用可以验证并升级到多个项目的东西来填充,但在有的时候也可以工作ExerciseData

我的目标是该人用于- addSet创建一个新UITableCell的按钮被按下的次数,然后我需要验证里面的任何内容,以便如果是 aExerciseData entity并且属性权重设置为填充cell.weightInput.text或不填充它

- (void) addNewSet {
     ExerciseData * newEd = [[ExerciseData alloc] init];
     NSMutableArray* ar = [[NSMutableArray alloc]initWithArray:_ed];
    [ar addObject:newEd];
    _ed = [[NSArray alloc] initWithArray:ar];
    [_mytable reloadData];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    workoutCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (!cell) {
        cell = [[workoutCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
    }

    cell.weightInput.text = @"";
    if ( indexPath.row < [_ed count] ) {
        if (![[[_ed objectAtIndex:indexPath.row] class] isKindOfClass:[NSString class]]) {
            NSLog(@"%@",_ed);
             cell.weightInput.text = [NSString stringWithFormat:@"%@",[[_ed objectAtIndex:indexPath.row] weight]];
        }
    }
//...
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if ( [_ed count] == 0 ) {
        return 1;
    } else {
        return [_ed count];
    }
}
4

1 回答 1

0

要创建一个新的 CoreData 实体,您需要:

ExerciseData *data = (ExerciseData*)[NSEntityDescription insertNewObjectForEntityForName:@"ExerciseData" inManagedObjectContext:yourContext];

确保在之后保存您的上下文!

于 2013-07-10T20:16:33.633 回答