2012-04-09 2 views
0

Ich muss in der Lage sein, den Inhalt meiner Tabellenansicht, die Daten von einem NSMutableArray enthält, in eine TXT-Datei speichern und dann diese Datei automatisch öffnen müssen wenn das Fenster die Tabellenansicht enthält. Ich mache eine Anwendung für Mac
dank Dies ist der Code für die Datenquelle:muss den Inhalt der Tabellenansicht als TXT-Datei speichern und später neu laden

#import "tableViewData.h" 
#import "Customer.h" 
@implementation tableViewData 
-(id) init 
{ 
self = [super init]; 
if (self) { 
    list = nil; 
    filepath = @"/Users/Gautambir/Desktop/CustomerNames.txt"; 
    if ([[NSFileManager defaultManager]fileExistsAtPath:filepath]) { 
     list = [[NSMutableArray alloc] initWithContentsOfFile:filepath]; 
    } 
    else 
    list = [[NSMutableArray alloc]initWithObjects:name,memberNumber ,nil]; 
     [list writeToFile:filepath atomically:YES]; 
} 
return self; 
} 

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{ 
return [list count]; 
} 

-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn  *)tableColumn row:(NSInteger)row{ 
Customer *Customer = [list objectAtIndex:row]; 
NSString *identifier = [tableColumn identifier]; 
return [Customer valueForKey:identifier]; 
} 

-(void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{ 
Customer *Customer = [list objectAtIndex:row]; 
NSString *identifier = [tableColumn identifier]; 
[Customer setValue:object forKey:identifier]; 
} 


-(void)save{ 
[list writeToFile:filepath atomically:YES]; 
} 
-(IBAction)add:(id)sender{ 
[list addObject:[[Customer alloc]init]]; 
[tableView reloadData]; 

NSLog (@"array:%@",list); 


} 

-(IBAction)remove:(id)sender{ 
NSInteger row = [tableView selectedRow]; 
if (row != -1) { 
    [list removeObjectAtIndex:row]; 
} 

[tableView reloadData]; 

} 




-(void)dealloc 
{ 
[super dealloc]; 
} 


@end 

und dies ist die .m-Datei für die Kunden Objektklasse:

#import "Customer.h" 

@implementation Customer 

@synthesize name; 
@synthesize memberNumber; 


-(id) init 
{ 
self = [super init]; 
if(self) { 
    name = @"Test"; 
    int i = arc4random()%1000000000000000000; 
    if (i<0) { 
     memberNumber = i*-1; 
    } 
    else 
     memberNumber = i; 
} 
return self; 

} 

-(void)dealloc 
{ 
[name release]; 
[super dealloc]; 
} 

-(id)initWithCoder:(NSCoder *)aDecoder 
{ 
self = [super init]; 
if (self) 
{ 
    name = [[aDecoder decodeObjectForKey:@"name"]retain]; 
    memberNumber = [aDecoder decodeIntForKey:@"memberNumeber"]; 
} 
return self; 

} 

-(void)encodeWithCoder:(NSCoder *)aCoder 
{ 
[aCoder encodeObject:name forKey:@"name"]; 
[aCoder encodeInt:memberNumber forKey:@"memberNumber"]; 
} 

@end 

starker Text

Antwort

0

es tut mir leid, eine andere Antwort - ich falsch gelesen die Tags, und meine erste Antwort war auf iOS. das ist so, wie es in OSX zu tun:

NSMutableArray *array = ... //your array 

[array addObject:...]; 
[array addObject:...]; 
[array addObject:...]; 
... 

// then use an NSData to store the array 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; 
NSString *path = @"/Users/User/path..."; 
[data writeToFile:path options:NSDataWritingAtomic error:nil]; 

Abrufen

NSMutableArray *archive = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 

sebastian

+0

Lieber Sebastian zu speichern. Sie sind erstaunlich und ein Lebensretter. Sie können sich vorstellen, wie lange ich versucht habe, diese Arbeit zu machen, und so viele Menschen auf SO sind unhöflich und beantworten die Frage nicht, aber Sie sind erstaunlich, danke Ihnen soooooo viel. ich habe auch eine andere Frage, die ich dich fragen möchte, wie du Fragen richtig antwortest, wenn ich den Kundennamen nur von einer Kundennummer in einem anderen Fenster sagen möchte, das ich öffnen kann, wie ich das machen würde, lass es mich bitte wissen . vielen Dank noch einmal sooooo viel wieder –

+0

Hallo, zuerst einmal: froh, ich könnte helfen, aber dann: auf StackOverflow ist es eine 'Regel' tu upvote und akzeptieren Antworten, die Sie mögen ;-) dies wird die Frage schließen und es aus dem Stream verschwinden . Bitte mach es. Für weitere Fragen, öffnen Sie eine neue, es ist nicht gut, verschiedene Fragen zu mischen, für zukünftige Benutzer, die hier etwas bestimmtes suchen könnten. –