2015-11-03 51 views
1

我有以下类到目前为止:目标C创建实例在运行时

@interface BRPerson : NSObject 
@property (nonatomic) NSString *name; 
@property (nonatomic) NSString *address; 

-(instancetype)initWithName:(NSString*)name andAddress:(NSString*)address; 

@implementation BRPerson 

-(instancetype)initWithName:(NSString*)name andAddress:(NSString*)address{ 
    self.name = name; 
    self.address = address; 
    return self; 
} 
@end 

和我的主要是:

#import <Foundation/Foundation.h> 
#import "BRPerson.h" 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
     NSString *filepath = [[NSBundle mainBundle] pathForResource:@"Directory" 
                  ofType:@"txt"]; 
    } 
    return 0; 
} 

的Directory.txt文件是一个纯文本文件我创建的是设置为:

name, address 
name2, address2 
name3, address3 

我想写一个程序读取名称和地址,并创建一个新的BRPerso实例n类名称是实例名称。它首先必须存储在NSDictionary中(名称是键和值的地址)?

任何帮助表示赞赏。先谢谢你。

+0

为什么你使用rtf为纯文件?纯文本使用txt。 rtf用于富文本格式,而不是纯文本格式。 – rmaddy

回答

1

继Objective-C的pattern for initializers,请执行下列操作:

-(id)initWithName:(NSString*)name andAddress:(NSString*)address{ 
    self = [super init]; 
    if (self) { 
     _name = name; 
     _address = address; 
    } 
    return self; 
} 

您也可以考虑提供一个方便的工厂方法,如:

+ (instancetype)personWithName:(NSString*)name andAddress:(NSString*)address { 
    return [[self alloc] initWithName:name andAddress:address]; 
} 

有了这个,是构建实例的循环看起来像许多SDK的部分:

NSMutableArray *persons = [@[] mutableCopy]; 
while (/* more input */) { 
    NSString *name = // next name from input 
    NSString *address = // next address from input 

    BRPerson *person = [BRPerson personWithName:name andAddress:address]; 
    [persons addObject]; 
} 
// here, the array persons will contain several BRPerson instances 
// as specified by the input