- [__ NSCFConstantString size]:无法识别的选择器发送到实例......?

时间:2013-08-17 12:47:35

标签: ios uiimage size

redSegmentedControl.m

redSegmentedControl.h

现在,我在另一个控制器中编写代码

 // self.segmentedControl = [[redSegmentedControl alloc] initWithFrame:CGRectMake(0, 140, 320, 50)];

self.segmentedControl = [[redSegmentedControl alloc] initWithSectionImages:@[@"list.png", @"list.png", @"list.png"] sectionSelectedImages:@[@"list.png", @"list.png", @"list.png"]];


//[self.segmentedControl setSectionTitles:@[@"List", @"Activity", @"Top Tags"]];

如果删除了注释行,它可以正常工作,但如果运行此代码,则会出错。

-[__NSCFConstantString size]: unrecognized selector sent to instance ...

我跟踪了,我在 - (void)updateSegmentsRects 方法的这些行中发现了问题。

 for (UIImage *sectionImage in self.sectionImages) {
            CGFloat imageWidth = sectionImage.size.width + self.segmentEdgeInset.left + self.segmentEdgeInset.right;
            self.segmentWidth = MAX(imageWidth, self.segmentWidth);
        }

在这里,它访问放入数组的图像的大小,但是出错,任何人都可以替换代码或告诉我原因。

2 个答案:

答案 0 :(得分:6)

您的redSegmentedControl类希望sectionImages成为UIImage个对象的数组,但是上面使用initWithSectionImages初始化对象的代码会将{{1}数组传递给它}}。因此错误。

因此,您可能希望更改init方法的调用方:

NSStrings

或者更改self.segmentedControl = [[redSegmentedControl alloc] initWithSectionImages:@[[UIImage imageNamed:@"list.png"], ...]]; 实现,以便它期望redSegmentedControl成为NSStrings的数组。可能前一个选项会更好,因此调用者可以负责如何创建图像,控件不应该关心它。

答案 1 :(得分:1)

您的initWithSectionImages方法需要一组UIImages,但是您传递的是NSStrings数组。由于NSString对象没有size属性,因此不起作用。

所以传递UIImages而不是NSStrings,它应该可以工作。