2015-11-03 58 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