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

时间:2011-07-13 13:09:31

标签: ios xcode core-data nsmanagedobjectcontext viewcontroller

我使用此方法将数据传递给视图:

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正确通过了吗?

我对这一切都是一个菜鸟,所以感谢任何帮助!!!

2 个答案:

答案 0 :(得分:0)

我认为您将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的tableview控制器,并配置为从byTheHusk托管对象上下文中获取。

如果是,那么从此代码获得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]不会返回任何类型的对象。

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

答案 1 :(得分:0)

我通过一些教育和反复试验以及错误和错误来解决这个问题。

但我明白了!!!!

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];
} 

把它放在一个数组中然后翻过来......感谢大家的指导!