【问题标题】:iOS Expression result unused in viewDidLoad methodviewDidLoad 方法中未使用的 iOS 表达式结果
【发布时间】:2017-03-15 20:19:40
【问题描述】:

我正在开发一个 iOS 应用程序,需要显示一个包含两个组件的 PickerView,一个带有字符串,一个带有 UIImageViews。在视图控制器的类扩展中,我创建了一个名为“suites”的 NSArray 来保存 UIImage,并在 viewDidLoad 方法中填充数组:

viewDidLoad method

我还将视图控制器指定为 PickerView 的委托和数据源。我必须全局变量来识别 PickerView 的两个组件:

#define numberComponent 0
#define suiteComponent 1

并实现了以下委托方法:

- (UIView *)pickerView:(UIPickerView *)pickerView
            viewForRow:(NSInteger)row
            forComponent:(NSInteger)component
            reusingView:(nullable UIView *)view
{
    if (component == suiteComponent){
        UIImageView *imageView = (UIImageView *) view;
        if(!imageView){
            imageView = [[UIImageView alloc] initWithImage: self.suites[row]];
        }
        imageView.image = self.suites[row];
        return imageView;
    }
    else{
        UILabel *label = (UILabel *) view;
        if(!label){
            label = [[UILabel alloc] init];
        }
        label.text = self.numbers[row];
        return label;
    }
}

在模拟器中,包含 UILabel 的选择器组件渲染得很好。包含 UIImageViews 的组件不会显示出来,我猜这是因为 UIImages 数组没有被使用:

simulator

更新: 里面的块 如果(组件 == 套件组件) 永远达不到。我有这个数据源方法:

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

所以如果我的理解是正确的,UIPickerView 最终应该调用它的委托来渲染第二个组件。但是,当我调试它时,委托方法的行参数在所有调用中都保持在 0 到 4 之间,并且组件变量保持在 0。

感谢您的帮助,谢谢!

【问题讨论】:

标签: objective-c uiimageview uipickerview


【解决方案1】:

这是启动自定义对象的错误方式。

你应该这样做:

self.suites = [[Suites alloc] initWithObjects:@[heart,club,spade,diamond]];

然后你可以正确使用 self.suites。注意我假设您的自定义对象类名称是“Suites”。您需要将该名称更改为您的自定义类名称。我还假设该函数接受 NSArray,因此我创建了字面 ObjC 数组 @[..]。

而且传递的参数也很可疑。您不需要在参数传递中强制转换对象类型。您需要检查自定义类的 initWithObjects: 声明。是声明输入数组还是UIImage?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2014-12-06
    • 2012-09-02
    相关资源
    最近更新 更多