从类别类创建对象

时间:2014-09-26 02:23:02

标签: objective-c objective-c-category

我想创建一个新对象,其中一个属性是(readonly)。 这是我的代码:

1 /我的班级(.h + .m)

#import <Foundation/Foundation.h>
@interface MyClass : NSObject
@property (readonly) NSString* myProperty;
@end

#import "MyClass.h"
@implementation MyClass
@end

2 /我的班级分机(.h)

#import "MyClass.h"
@interface MyClass ()
@property (readwrite) NSString* myProperty;
@end

3 / MyClassCategory(.h + .m)

#import "MyClass.h"

@interface MyClass (MyClassCategory)

+ (MyClass*) creatNewObject:(NSString*) mypro;

@end

#import "MyClass+MyClassCategory.h"
#import "MyClass_MyClassExtension.h"
@implementation MyClass (MyClassCategory)

+ (MyClass*) creatNewObject:(NSString*) mypro {

    MyClass* newObject = [[MyClass alloc] init];
    newObject.myProperty = mypro;
    NSLog(@"New object have been created%@", newObject);
    return newObject;
}

@end

#import <Foundation/Foundation.h>
#import "MyClass.h"
#import "MyClass+MyClassCategory.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    MyClass* newObject1 = [MyClass creatNewObject:(@"I am the new object!")];

        NSLog(@"New object have been created%@", newObject1);

    }
    return 0;
}

在main方法中运行代码后,我得到了

  

2014-09-25 21:53:52.204 MyClass [2811:303] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [MyClass setMyProperty:]:无法识别的选择器已发送例如0x100109e10'

014-09-25 22:36:05.746 MyClass [2989:303] - [MyClass setMyProperty:]:无法识别的选择器发送到实例0x100200130

我希望能够从类别中对现有类实例的属性进行编辑。

你能帮帮我吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

MyClass.m中,您还需要包含扩展程序标题。

#import "MyClass_MyClassExtension.h"

否则编译器在生成myProperty的实现时不会将MyClass重新声明为读写属性。