Ios NSArray上超出范围且摘要错误无效

Ios NSArray上超出范围且摘要错误无效,ios,xcode,nsarray,Ios,Xcode,Nsarray,我正试图创建Dave Mark在iPhone开发书中描述的UIPickerview。我有一个NSArray,它被声明为h文件中的一个属性,该文件将存储UIPickerview的数据。这就是我所拥有的: 在.h文件中: @interface RootViewController : UIViewController { NSArray *dateForPicker; } @property (nonatomic, retain) NSArray *dateforPicker; @end

我正试图创建Dave Mark在iPhone开发书中描述的
UIPickerview
。我有一个
NSArray
,它被声明为h文件中的一个属性,该文件将存储
UIPickerview
的数据。这就是我所拥有的:

在.h文件中:

@interface RootViewController : UIViewController {
    NSArray *dateForPicker;
}
@property (nonatomic, retain) NSArray *dateforPicker;
@end
.m文件
viewDidLoad
方法中(我确实在.m文件开头有
@synthesis
dateForPicker
属性):

当出现
UIPickerview
时,所有行中都会出现“?”。因此,当我在
viewDidLoad
方法中使用断点检查tempArray和dateForPicker的值时,我发现
tempArray
很好,但是
dateForPicker
从未从
tempArray
获取值。Xcode为
dateForPicker
数组显示“无效摘要”,并将“超出范围”作为五行的值。发生了什么事?正如书中所描述的,这应该是可行的

以下是UIPickerView的代码:

#pragma mark - 
#pragma mark picker data source methods

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return [dateforPicker count];
}

#pragma mark picker delegate methods

-(NSString *)pickView:(UIPickerView *)pickerView titleForRow:(NSInteger)row
     forComponent:(NSInteger)component{
    return [dateforPicker objectAtIndex:row];
}
@end

您的代码有一些问题。我不清楚您是手动在问题中键入了这一点,还是从实际代码中复制粘贴了这一点:

  • 您设置的是
    self.dateforPicker
    ,而不是
    self.dateforPicker
    ,您的ivar和您的房产之间的资本化存在差异。在iOS中,当您声明属性时,编译器将合成一个
    dateforPicker
    ivar,该属性是在
    viewDidLoad
    中设置的,但在其他方法中,您可能引用的是从未接触过的
    dateforPicker
    ivar
  • 您的
    RootViewController
    未声明它实现了
    UIPickerViewDataSource
    UIPickerViewDelegate
    协议
  • 您对
    titleForRow
    方法的声明是错误的-您的声明以
    pickView
    而不是
    pickerView
    开始,因此不会被调用

如果组件中的行数正确(您说的是多个问号,多少?),那么看起来数据源连接正确,但您还需要连接代理,因为这实际上是为每一行提供值的。令人困惑的是,数据源只提供组件的数量和每个组件的行数

发布更多的代码,例如picker调用以及它如何访问dateforPicker ivar。在为dateforPicker赋值后,单步执行代码并在控制台窗口中执行“po self->dateforPicker”。然后类似地检查dateForPicker,当它在picker委托例程中被引用时,或者在任何地方。我在从tempArray中为它分配了值之后,执行了一个po self->dateForPicker。输出为“无法打印NIL对象的描述”。检查UIPickerView出口是否仍然连接(数据源和委托)谢谢!你是对的。这是资本化的原因。我已经解决了资本化问题,UIPickerView提供了一些值。不过,有些奇怪的事情正在发生。当我逐步完成代码并查看tempArray的值时,当我在tempArray上进行鼠标悬停时,调试器会毫无问题地显示6个对象。当我将鼠标移到dateForPicker上时,它仍然显示“无效摘要”,但当我单击箭头时,它会显示6行,每行都有一条注释“无效摘要”。我觉得还是有什么不对劲,以后可能会绊倒我。发生什么事了?
#pragma mark - 
#pragma mark picker data source methods

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return [dateforPicker count];
}

#pragma mark picker delegate methods

-(NSString *)pickView:(UIPickerView *)pickerView titleForRow:(NSInteger)row
     forComponent:(NSInteger)component{
    return [dateforPicker objectAtIndex:row];
}
@end