2015-11-03 2 views
1

je la classe suivante jusqu'à présent:Créer des instances Au cours d'exécution en Objective 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 

et ma principale est:

#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; 
} 

Le fichier Directory.txt est un fichier clair que je créé, qui est mis en place comme:

name, address 
name2, address2 
name3, address3 

Je suis en train d'écrire un programme qui lit les noms et adresses et crée une nouvelle instance de la BRPerso n classe avec le nom étant le nom de l'instance. Devrait-il d'abord être stocké dans NSDictionary (avec le nom étant la clé et adresser la valeur)?

Toute aide est appréciée. Merci d'avance.

+0

Pourquoi utilisez-vous rtf pour un fichier simple? Utilisez txt pour le texte brut. RTF est pour le format RTF, pas en texte brut. – rmaddy

Répondre

1

Après Objective-C de pattern for initializers, procédez comme suit:

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

Vous pourriez aussi envisager de fournir une méthode de fabrication de commodité, comme ceci:

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

Avec cela, la boucle qui construit les instances ressemblera à beaucoup de parties du 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