使用属性语法设置shadowColor会产生编译器错误:'['标记之前的预期标识符

时间:2010-04-27 19:02:53

标签: c cocoa-touch uikit objective-c-2.0

我有一个iPad应用程序,我在UIView的initWithFrame:方法中设置了UILabel的阴影颜色。当我使用以下语法时:

m_label.shadowColor = [UIColor colorWithWhite:1.0 alpha:0.5];

我收到此编译器错误:

'''令牌

之前的预期标识符

但是,当我使用以下语法时:

[m_label setShadowColor:[UIColor colorWithWhite:1.0 alpha:0.5]];

它无怨无悔地编译。

使用UILabel的其他属性的属性语法工作正常(shadowOffset,autoresizingMask,backgroundColor,font,textColor等)。

顺便说一句,当语句只是这样时,我得到相同的错误消息:

m_label.shadowColor;

然而,例如,这不会给出错误:

m_label.shadowOffset;

FWIW,整个方法如下:

#define shadowColor        [UIColor colorWithWhite:1.00 alpha:0.5]
#define selectedColor      [UIColor colorWithWhite:0.25 alpha:1.0]
#define unselectedColor    [UIColor colorWithWhite:0.45 alpha:1.0]
#define CLOSEBUTTON_WIDTH  26.0
#define CLOSEBUTTON_HEIGHT 26.0

- (id)initWithFrame:(CGRect)frame 
{
    if ((self = [super initWithFrame:frame])) 
    {
        m_imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height)];
        m_imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        m_imageView.backgroundColor = [UIColor clearColor];
        m_imageView.image = [[UIImage imageNamed:@"tab.png"] stretchableImageWithLeftCapWidth:8.0 topCapHeight:0.0];
        m_imageView.highlightedImage = [[UIImage imageNamed:@"tabSelected.png"] stretchableImageWithLeftCapWidth:8.0 topCapHeight:0.0];

        m_label = [[UILabel alloc] initWithFrame:CGRectZero];
        m_label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        m_label.backgroundColor = [UIColor clearColor];
        m_label.font = [UIFont boldSystemFontOfSize:12.0];
        m_label.textColor = unselectedColor;
        m_label.shadowOffset = CGSizeMake(0.0, 1.0);
        m_label.shadowColor = shadowColor; // Expected identifier before '[' token
        [m_label setShadowColor:shadowColor];

        m_closeButton = [[UIButton alloc] initWithFrame:CGRectMake(9.0, 1.0, CLOSEBUTTON_WIDTH, CLOSEBUTTON_HEIGHT)];
        [m_closeButton setBackgroundImage:[UIImage imageNamed:@"tabClose.png"] forState:UIControlStateNormal];
        [m_closeButton addTarget:self action:@selector(closeTab) forControlEvents:UIControlEventTouchUpInside];

        [self addSubview:m_imageView];
        [self addSubview:m_label];
        [self addSubview:m_closeButton];

        self.backgroundColor = [UIColor clearColor];
    }
    return self;
}

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

#define shadowColor        [UIColor colorWithWhite:1.00 alpha:0.5]

正在进行任务的双方扩展。

m_label.shadowColor = shadowColor;

评估为:

m_label.[UIColor colorWithWhite:1.00 alpha:0.5] = [UIColor colorWithWhite:1.00 alpha:0.5];

导致编译器错误。为#define使用不同的名称:

#define SHADOW_COLOR        [UIColor colorWithWhite:1.00 alpha:0.5]

m_label.shadowColor = SHADOW_COLOR;

答案 1 :(得分:1)

两件事 - 您需要将以下内容添加到您的文件中:

#import <QuartzCore/QuartzCore.h>

第二个是你使用CGColorRef作为shadowColor,所以你应该做这样的事情:

m_label.layer.shadowColor = [[UIColor colorWithWhite:1.0 alpha:0.5] CGColor];

答案 2 :(得分:0)

为了回答原来的问题,我现在理解它好一点,听起来你不是以某种方式包括<UIKit/UILabel.h>。它应该已经通过<UIKit/UIKit.h>包含在项目的预编译头文件中。

您使用的是已发布的3.2 SDK,而不是预发布版本或4.0的当前测试版吗?如果没有,请确保使用正确的SDK。还要确保您的项目的.pch文件没有发生。你应该有<UIKit/UIKit.h>的#import。

我在我自己的项目中使用3.2 SDK进行测试 - 我可以在UILabel上使用shadowColor属性,而不会出现您看到的错误。所以看起来你的结果可能已被破坏了。

答案 3 :(得分:0)

确保在您的界面中正确键入m_label(即,其类为UILabel)。如果编译器使用了错误的类型,则属性点语法不起作用,但Objective-C的动态特性将允许您向可能无法响应它们的对象发送消息(在这种情况下也应该发出警告) 。这就是-setShadowColor:正在发挥作用的原因。