迭代传递给视图的核心数据
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
等,但没有运气
有没有办法以while
或for
循环样式结构访问对象条目属性?
我能得到的最接近的是:
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];
把它放在一个数组里然后滚动它...谢谢大家的指导!
【讨论】:
以上是关于迭代传递给视图的核心数据的主要内容,如果未能解决你的问题,请参考以下文章
如何从数据框中迭代值并将值传递给 Python 中的发送电子邮件函数