initWithFrame在IOS 5中不能用于我的项目,但在IOS 4中没有

时间:2012-01-26 19:24:17

标签: objective-c xcode4 ios4 ios5 xcode4.2

我在ios 4的教程中创建了一个程序,这是一个复选框。我有一个朋友开始使用xcode为iphone编程。所以,我给了他我的代码,所以他可以开始。事实证明,他试图按照我为IOS4制作的代码在ios5中自己编写代码。他一直告诉我他没有工作,并且他得到了一些错误,如下所示。所以我会打开我的代码并在我更新的xcode上运行它并且运行正常,没有问题。 有趣的是,当我到他家时,我看着代码并玩弄它。他是对的。尝试使用新的ios从新的xcode中的新项目中执行代码,该项目会抛出各种错误。我发布了一些在底部。

所以,我的问题是这个......为什么会这样? 这与ios5使用ARC和不同属性的方式有关吗?

  • NSObject可能无法响应initWithFrame
  • 实例方法 - 找不到setImageForState(返回类型默认为“id”)
  • 实例方法 - addTarget:action:找不到forControlEvents(返回类型默认为id)
  • MicheckBox可能无法响应initWithFrame 还有一些

我的代码如下 必须png一个名为checkbox_ticked.png和checkbox_not_ticked.png

micheckbox.h

#import <UIKit/UIKit.h>
@interface MICheckBox : UIButton 
{
BOOL isChecked;
}
@property (nonatomic,assign) BOOL isChecked;
-(IBAction) checkBoxClicked;
@end

micheckbox.m

#import "MICheckBox.h"
@implementation MICheckBox
@synthesize isChecked;
- (id)initWithFrame:(CGRect)frame 
{
    if (self = [super initWithFrame:frame]) 
    {
    [self setImage:[UIImage imageNamed:@"checkbox_not_ticked.png"] forState:UIControlStateNormal];
[self 
addTarget:self action:@selector(checkBoxClicked)forControlEvents:UIControlEventTouchUpInside];
    }
    return self;
}
-(IBAction) checkBoxClicked
{
if(self.isChecked ==NO)
    {
    self.isChecked =YES;
    [self setImage:[UIImage imageNamed:@"checkbox_ticked.png"] forState:UIControlStateNormal];

    }
    else
        {
            self.isChecked =NO;
        [self setImage:[UIImage  imageNamed:@"checkbox_not_ticked.png"]forState:UIControlStateNormal];
        }
}
- (void)dealloc 
{
    [super dealloc];
}
@end

MICheckBoxAppDelegate.h

#import <UIKit/UIKit.h>
@interface MICheckBoxAppDelegate : NSObject <UIApplicationDelegate> 
{
    UIWindow *window;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end

MICheckBoxAppDelegate.m

#import "MICheckBoxAppDelegate.h"
#import "MICheckBox.h"
@implementation MICheckBoxAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(UIApplication *)application 
{    
    // Override point for customization after application launch
    MICheckBox *checkBox =[[MICheckBox alloc]initWithFrame:CGRectMake(5, 80, 150, 30)];
    [checkBox setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [checkBox setTitle:@"Checkbox" forState:UIControlStateNormal];
    [window addSubview:checkBox];
    [window makeKeyAndVisible];
}
- (void)dealloc 
{
    [window release];
    [super dealloc];
}
@end

1 个答案:

答案 0 :(得分:0)

我想你忘了在MICheckBox类的initWithFrame中“返回self”。