2012-04-13 8 views
0

Ich habe ein Programm, das 2 Tabellen auf zwei verschiedenen Fenstern hat. Eine Tabelle enthält den Kundennamen und die ID-Nummer und die andere den Namen und die Nummer des Artikels. Sie werden sowohl in einem Array als auch in einer .plist-Datei gespeichert.Wie bekomme ich Informationen von einer Objektinstanz von ID-Nummer

Was ich tun möchte ist, dass auf einer dritten Seite wird eine Verkaufsseite sein, wo der Benutzer die Kunden-ID und Artikel-ID eingeben und das Programm sollte in der Lage sein, den Namen zu finden und zu a anzeigen Etikette. Ich weiß nicht, wo ich anfangen und gehen soll. Könnte jemand bitte helfen oder mir zeigen, wie ich es mache? Ich kann jeden Code hochladen, den jeder sehen möchte, aber da ich nicht weiß, wo ich anfangen soll, weiß ich nicht, was ich hochladen soll.
ist dies die customer.h Datei

#import <Foundation/Foundation.h> 
NSString *name; 
int memberNumber; 


@interface Customer : NSObject <NSCoding> 
{ 
NSString *name; 
int memberNumber; 

} 
@property (nonatomic, copy) NSString *name; 
@property int memberNumber; 


@end 

dies der customer.m

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

} 

- (id)initWithCoder:(NSCoder *)decoder 
{ 
if (self = [super init]) 
{ 
    self.name = [decoder decodeObjectForKey:@"name"]; 
    self.memberNumber = [decoder decodeIntForKey:@"memberNumber"]; 


} 
return self; 
} 

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

} 

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


@end 

ist ist das die tableView.h

#import <Foundation/Foundation.h> 
#include <stdlib.h> 
NSString *filepath; 
@interface tableViewData : NSObject <NSTableViewDataSource> 
{ 
@private 
    IBOutlet NSTableView *tableView; 
    NSMutableArray *list; 
    NSString *filepath; 




} 
-(IBAction)add:(id)sender; 
-(IBAction)remove:(id)sender; 





@end 

ist dies die tableView.m Datei Datei

#import "tableViewData.h" 
#import "Customer.h" 
@implementation tableViewData 

-(void)awakeFromNib{ 
filepath = @"/Users/Desktop/CustomerNames.plist"; 
if ([[NSFileManager defaultManager]fileExistsAtPath:filepath]) 
{ 
    NSMutableArray *archive = [NSKeyedUnarchiver unarchiveObjectWithFile:filepath]; 
    list = archive; 
} 
else 
    list=[[NSMutableArray alloc]init]; 
} 

-(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]; 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:list]; 
[data writeToFile:filepath options:NSDataWritingAtomic error:nil]; 
} 



-(IBAction)add:(id)sender 
{ 
[list addObject:[[Customer alloc]init]]; 
[tableView reloadData]; 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:list]; 
[data writeToFile:filepath options:NSDataWritingAtomic error:nil]; 
for (id name in list) 
    NSLog(@"obj: %@", name); 
NSLog (@"array:%@",list); 


} 


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

[tableView reloadData]; 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:list]; 
[data writeToFile:filepath options:NSDataWritingAtomic error:nil]; 

} 




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


@end 

hoffte, das hilft

(Xcode 4.2.1 für OS X)

Antwort

0

Zum Beispiel:

if([myNumber isKindOfClass:[NSNumber class]]) 
{ 
    //do something here 
} 

, die prüfen, ob Objekt myNumber ist eine NSNumber Object-Klasse. Sie können natürlich jede gewünschte Klasse verwenden. Lesen Sie die documentation

+0

also, wenn ich richtig verstehe, um mein Programm zu bekommen, um einen Namen eines Kunden mit nur einer ID-Nummer anzuzeigen, würde ich tun, was Sie sagten, und dann in der Methode bit würde ich sagen [label setValue name]; ? – GBSingh

+0

Warte ... was meinst du mit id? http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocObjectsClasses.html Objektidentifikatoren oder Ihre interne Kundennummer? – Kuba

+0

ich meine eine ID-Nummer, die jedem Kunden gegeben wurde – GBSingh

0

Wenn Einträge, die Tabelle geladen in der gleichen Reihenfolge in der Tabelle sind Sie

[myArray objectAtIndex:[indexPath row]]; 

Dann kann die Verwendung der Variablen des Arrays verwenden können, die Sie benötigt.

+0

Entschuldigung, aber ich bin ein kompletter Anfänger, also bin ich mir nicht sicher, was ich tun muss. mache ich ein neues Objekt und eine Klasse und verbinde sie dann. Was verlinke ich mit der Schnittstelle? Ich werde den Code der Kundenklasse und auch den Quellcode der Tabelle eingeben, damit Sie sehen können, was ich versuche zu tun. Danke – GBSingh

0

Erste in diesem Code:

-(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]; 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:list]; 
    [data writeToFile:filepath options:NSDataWritingAtomic error:nil]; 
    } 

Änderung Kunde * Kunde zu Kunde * Kunde immer auf diese Weise verwenden.

Verwenden Sie dann diese Methode, um zu verstehen, welche Zeile ausgewählt ist. In Ihrem Fall, welcher Kunde ausgewählt ist. Ich verstehe aus Ihrem Code, dass jede Zeile einen Kunden hat und diese Kunden in Ihrem Listen-Array sind.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     //with this code you can get the selected customer from your list, 
     Customer *customer=[list objectAtIndex:[indexPath row]]; 

    } 

Dann können Sie die Werte des Kunden erreichen.

+0

Hallo. Danke für die Antwort. aber wenn ich das mache, versuche ich 2 Fehler. eine ist: Instanzmethode '-row' nicht gefunden (Rückgabetyp ist standardmäßig 'id') und die andere ist: Inkompatibler Zeiger auf Integer-Konvertierung sendet 'id' an Parameter vom Typ 'NSUInteger' (alias 'unsigned long'). auch wenn ich dies getan habe, wie drucke ich den namen des kunden abhängig von ihrer IDnummer (memberNumber). ein anderes das danke, dass du mir sagst, dass ich Kunden * -Kunden machen soll, aber wenn es dir nichts ausmacht, aber warum tust du das? ist es nur Konvention? Danke – GBSingh

+0

dünn darüber, dass Sie den Kunden memberId erhalten möchten. In meinem Fall ist code.customer.memberId, aber in Ihrem casa Customer.memberId, was zu einem Fehler führen wird. Es kann wie eine Singleton-Klasse handeln. Sie können nicht den richtigen Wert erhalten. Versuchen Sie auch, [indexPath Zeile] zu indexPath.row ändern – mhunturk

+0

ist dies eine Antwort für iOS oder OS X, wie ich denke, UITableView ist für iOS – GBSingh

Verwandte Themen