2014-02-18 77 views
0

中的数组数据正确更新标签我试图在两点之间获得预设里程(school1 & school2)。我写的名为“getMileage”的方法适用于使用MagicalRecord并从我的CoreData中获取正确的里程数(例如PointA到PointB为2.6英里)无法使用方法

我有一个包含2个组件的选取器 - 当用户选择来自任意一个选择器的位置我希望我的里程标签用适当的值(2.6,3.1,4.0,无论从数据库返回什么)更新。

最初加载得很好 - 因为在getMileage方法中设置的数组是空的,因为在picker上没有做出选择。一旦选择器选择的东西,它抛出这一条错误:

2014-02-18 10:31:41.345 54 Miles[18618:70b] Our result miles are: (
    "2.6" 
) 
2014-02-18 10:31:41.345 54 Miles[18618:70b] -[__NSArrayI length]: unrecognized selector sent to instance 0x8a16690 
2014-02-18 10:31:41.349 54 Miles[18618:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI length]: unrecognized selector sent to instance 0x8a16690' 
*** First throw call stack: 

正如你所看到的 - NSLog的将显示从我getMileage方法返回适当英里。

这是我的选择器的didSelectRow方法:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if (_tripPicker) { 
     if (component == 0){ 
      //Get Mileage array 
      NSArray *currentMiles = [self getMileage]; 
      //Update Labels 
      begSchoolLabel.text = [_schoolArray1 objectAtIndex:row]; 
      _milesLabel.text = [currentMiles valueForKey:@"miles"]; 
     } 
     if (component == 1){ 
      //Get Mileage array 
      NSArray *currentMiles = [self getMileage]; 
      //Update Labels 
      endSchoolLabel.text = [_schoolArray2 objectAtIndex:row]; 
      _milesLabel.text = [currentMiles valueForKey:@"miles"]; 
     } 


    } 
} 

这里是我的getMileage方法:

- (NSArray *)getMileage { 
    //Update the Mileage indicator to display miles between currently selected values 
    NSString *begSchool = [_schoolArray1 objectAtIndex:[_tripPicker selectedRowInComponent:0]]; 
    NSString *endSchool = [_schoolArray1 objectAtIndex:[_tripPicker selectedRowInComponent:1]]; 
    NSPredicate *milesFilter = [NSPredicate predicateWithFormat:@"beg_school=%@ AND end_school=%@", begSchool, endSchool]; 
    NSArray *resultMiles = [MetaMiles MR_findAllWithPredicate:milesFilter]; 
    if (!resultMiles || ![resultMiles count]) { 
     //The first load - this displays appropriately in log letting us know there is currently nothing there 
     NSLog(@"Empty Array"); 
    } else { 
     //This confirms our result miles come out appropriately - they look like this: ("2.1") 
     NSLog(@"Our result miles are: %@", [resultMiles valueForKey:@"miles"]); 
    } 
    return resultMiles; 
} 

问题在于我选择器的didSelectRow地方 - 试图将标签分配时resultMiles;那是什么时候它打破了。

我已经试过这也为我的“didSelectRow”的方法:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if (_tripPicker) { 
     if (component == 0){ 
      //Get Mileage array 
      NSArray *currentMiles = [self getMileage]; 
      //Update Labels 
      begSchoolLabel.text = [_schoolArray1 objectAtIndex:row]; 
      _milesLabel.text = [currentMiles objectAtIndex:0]; 
     } 
     if (component == 1){ 
      //Get Mileage array 
      NSArray *currentMiles = [self getMileage]; 
      //Update Labels 
      endSchoolLabel.text = [_schoolArray2 objectAtIndex:row]; 
      _milesLabel.text = [currentMiles objectAtIndex:0]; 
     } 


    } 
} 

揭开序幕这个错误,以及:

2014-02-18 10:44:02.099 54 Miles[18635:70b] Our result miles are: (
    "2.6" 
) 
2014-02-18 10:44:02.099 54 Miles[18635:70b] -[MetaMiles length]: unrecognized selector sent to instance 0x8ad3960 
2014-02-18 10:44:02.103 54 Miles[18635:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MetaMiles length]: unrecognized selector sent to instance 0x8ad3960' 
*** First throw call stack: 

我撞坏我的头这一段时间并用google搜索,并试图找到答案,但空手而来。

这可能是非常简单的东西,我误解或不做。所有帮助赞赏!

回答

1

您的代码

NSArray *resultMiles = [MetaMiles MR_findAllWithPredicate:milesFilter]; 
if (!resultMiles || ![resultMiles count]) { 
    //The first load - this displays appropriately in log letting us know there is currently nothing there 
    NSLog(@"Empty Array"); 
} else { 
    //This confirms our result miles come out appropriately - they look like this: ("2.1") 
    NSLog(@"Our result miles are: %@", [resultMiles valueForKey:@"miles"]); 

这对我来说看起来resultMiles是不是你正在使用valueForKey得到结果的数组(也许是字典),但后来您使用objectAtIndex从而未能

+0

我相信你让我走上了正确的轨道。这不是一个数组 - 一旦我仔细观察,fetchrequest就是一个MetaMiles对象数组!所以我不得不重写代码。 现在我在做:MetaMiles * tripMiles = [resultMiles objectAtIndex:0]; 然后使用tripMiles.miles访问里程,并正确显示里程。 感谢您的帮助! – Hanny

+0

现在我只需要弄清楚如何将该数字转换为标签。 – Hanny

+0

我只是做了_milesLabel.text = [NSString stringWithFormat:@“%@”,tripMiles.miles];生活是美好的!再次感谢。 – Hanny