我想创建一个新对象,其中一个属性是(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'
我希望能够从类别中对现有类实例的属性进行编辑。
你能帮帮我吗? 谢谢。答案 0 :(得分:0)
在MyClass.m
中,您还需要包含扩展程序标题。
#import "MyClass_MyClassExtension.h"
否则编译器在生成myProperty
的实现时不会将MyClass
重新声明为读写属性。