迭代传递给视图的核心数据

Posted

技术标签:

【中文标题】迭代传递给视图的核心数据【英文标题】:Iterating over core-data passed to a view 【发布时间】:2011-07-13 13:09:31 【问题描述】:

我正在使用这种方法将数据传递给视图:

nextViewController = [[AfricanSwallowViewController alloc] initWithNibName:@"AfricanSwallowView" bundle:nil];
((InstructionsViewController *)nextViewController).byTheHusk = byTheHusk;

我正在尝试遍历 byTheHusk 传递给的视图上的值。

我尝试了几个版本的NSLog(@"%@", byTheHusk.name); 并使用objectAtIndexPath 等,但没有运气

有没有办法以whilefor 循环样式结构访问对象条目属性?

我能得到的最接近的是:

NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:0];
NSLog(@"%@",[[managedObject valueForKey:@"name"] description]);

导致:

ByTheHusk[7880:207] (null)

这意味着有 207 个条目。是对的吗?并且 ByTheHusk 是否正确通过了?

我是这一切的菜鸟,所以谢谢你的帮助!!!

【问题讨论】:

byTheHusk是什么对象?为什么要迭代托管对象的集合? 核心数据对象从byTheHusk.h/m创建并包含在其中 没有“核心数据对象”这样的东西。有 NSManagedObject、NSManagedObjectContext 等实例。抱歉,细节很重要。 【参考方案1】:

我认为您将 NSManagedObjectContext 对象与 NSManagedObject 对象混淆了。

这段代码:

nextViewController = [[AfricanSwallowViewController alloc] initWithNibName:@"AfricanSwallowView" bundle:nil];
((InstructionsViewController *)nextViewController).byTheHusk = byTheHusk;

... 看起来像是试图将 NSManagedObjectContext 从一个视图控制器传递到另一个视图控制器。然而,尝试的演员阵容可能会把事情抛诸脑后。它应该看起来像这样:

InstructionsViewController *nextViewController = [[AfricanSwallowViewController alloc] initWithNibName:@"AfricanSwallowView" bundle:nil];
nextViewController.byTheHusk = self.byTheHusk; //assuming that byTheHusk is a property of the current view controller. 

我猜InstructionsViewController 是一个使用 NSFetchedResultsController 并配置为从 byTheHusk 托管对象上下文中获取的 tableview 控制器。

如果是这样,则从此代码中返回 null

NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:0];
NSLog(@"%@",[[managedObject valueForKey:@"name"] description]);

... 可能表明fetchedResultsController 在获取时找不到对象。在任何情况下,它都不会记录 byTheHusk 对象,而只会记录 fetch 找到的第一个 NSManagedObject 实例。

ByTheHusk[7880:207] (null)

这意味着有 207 个条目。是对的吗?还有那个 ByTheHusk 是否正确通过?

没有。在这种情况下,ByTheHusk 是应用程序/库的名称,数字是 IIRC,即目标文件中的行和块偏移量。它们与被记录的对象无关。 (null) 仅仅意味着语句[[managedObject valueForKey:@"name"] description] 不返回任何类型的对象。

不确定您的问题是什么,但修复上面的第一段代码会有所帮助。

【讨论】:

肯定有指导意义!我会看的。它没有被传递给表格视图,而是带有标签的视图,所需的结果是:` textFieldA1 = byTheHusk.objectAtIndex0.name textFieldA2 = byTheHusk.objectAtIndex0.typeofswallow textFieldB1 = byTheHusk.objectAtIndex1.name textFieldB2 = byTheHusk.objectAtIndex1.typeofswallow ` byTheHusk 必须是 NSArray,因为只有数组响应 objectAtIndex:。数组中的对象必须是您的托管对象,其键为 typeofswallow,返回字符串值。【参考方案2】:

我通过一些推导、反复试验、错误和错误弄明白了。

但我明白了!!!!

NSMutableArray* annotations=[[NSMutableArray alloc] init];
// Save our fetched data to an array  
[self setEventArray: mutableFetchResults];  
[mutableFetchResults release];  
[request release]; 
//NSLog(@"%d",[eventArray count]);

for (int i = 0; i < [eventArray count]; i++) 
    //NSLog(@"%@",[[eventArray objectAtIndex:i] name]);

    CLLocationCoordinate2D theCoordinate;
    double latNum = [[[eventArray objectAtIndex:i] latitude] doubleValue];
    theCoordinate.latitude = latNum;
    double lonNum = [[[eventArray objectAtIndex:i] longitude] doubleValue];
    theCoordinate.longitude = lonNum;
    //-------------------------
    MyAnnotation* tempAnnotation=[[MyAnnotation alloc] init];
    tempAnnotation.coordinate=theCoordinate;
    tempAnnotation.title=[NSString stringWithFormat:@"%@",[[eventArray objectAtIndex:i] name]];
    tempAnnotation.subtitle=[NSString stringWithFormat:@"%@",[[eventArray objectAtIndex:i] name]];
    //-------------------------
    [mapView addAnnotation:tempAnnotation];
    [annotations addObject:tempAnnotation];
 

把它放在一个数组里然后滚动它...谢谢大家的指导!

【讨论】:

以上是关于迭代传递给视图的核心数据的主要内容,如果未能解决你的问题,请参考以下文章

如何迭代测试数据,然后传递给 XCTestCase?

如何从数据框中迭代值并将值传递给 Python 中的发送电子邮件函数

在剃刀中将迭代数据从按钮传递到模态

将局部变量传递给 create.js.erb 以进行迭代中的迭代

Python - 迭代传递给函数的参数

Python:当列表仅在运行时确定时,如何将可迭代列表传递给 zip?