通过目标C中的prepareForSegue存储coredata数组

时间:2016-05-13 10:08:49

标签: ios objective-c core-data uinavigationcontroller nsarray

我需要将一个CoreData实体数组从我的主视图传递给TableViewController。

我使用了很多stackoverflow帖子来帮助自己,并认为它有效。

但是当我构建我的应用程序时,我遇到了一个线程问题,显示:

[NSTaggedPointerString count]: unrecognized selector sent to instance".

我做了一些检查,问题是,在我的tableView中,Row的数量设置为0。

所以这是我的代码:

我的MainViewController.m中的prepareForSegue函数:

(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"sgPushDetail"])
    {
        checkDataSavedTableViewController *detail = segue.destinationViewController;
        detail.datasToDisplay = _listOfDatas;
    }
}
  • listOfDatas是NSManagedObject的NSArray,在我的声明中声明 MainViewController.h

  • datasToDisplay是我在TableViewController中声明的NSArray。

这是我将数据放在TableViewController中的函数:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"dataCells" forIndexPath:indexPath];
    NSString *rowArray = self.datasToDisplay[indexPath.row];
    cell.textLabel.text = rowArray;
    return cell;
}

(但错误出现在ViewDidLoad中,所以meeeh)

我该如何进一步处理?

3 个答案:

答案 0 :(得分:0)

prepareforsegue中添加断点。并检查你的阵列。我认为你的数组是nil,所以你的表视图没有获取数据。放置必要的断点,或者你可以在tableviewcontroller的prepareforsegueviewdidload中打印数组,并检查你是否在数组中获取数据!

希望这会有所帮助:)

答案 1 :(得分:0)

您的错误位于NSString *rowArray = self.datasToDisplay[indexPath.row];

datasToDisplay 是一个NsManagedObject数组,而不是一个字符串数组。所以你需要从你的NsManagedObject中获取字符串值:

NSString *rowArray = [self.datasToDisplay[indexPath.row] valueForKey: @"stringKey"]

答案 2 :(得分:0)

好的,我很愚蠢。

因为我使用CoreData,所以我已经有了一个实体列表。我不需要我的NSArray的randomMeh,我只需要:

NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:context];