2012-04-13 21 views
0

2つの異なるウィンドウに2つのテーブルを持つプログラムがあります。 1つのテーブルは顧客名とID番号を保持し、もう1つはアイテム名と番号を保持します。それらは配列と.plistファイルの両方に格納されます。ID番号からオブジェクトインスタンスの情報を取得する方法

私がしたいのは、3番目のページには、顧客IDと商品IDを入力するセールスページがあり、プログラムはその名前を見つけてラベル。どこから出発して行くのかわからない。誰か助けてくれ、私に私のやり方を教えてもらえますか?誰かが見たいコードをアップロードすることができますが、どこから始めたらいいのかわからないので、アップロードするものを知りません。
これは、これが、これがtableView.hが、これはtableView.mファイルである

#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 

ファイルです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 

あるcustomer.hファイル

#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 

です

#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 

希望これは例えば

(OS X用のXcode 4.2.1)

答えて

0

に役立ちます:オブジェクトmyNumberがするNSNumberクラスのオブジェクトであるかどうかを確認

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

。もちろんどんなクラスでも使いたいです。あなたがテーブルにロードされた項目は、次に使用すると、あなたが必要な配列の変数を使用することができ

[myArray objectAtIndex:[indexPath row]]; 

を使用することができ、あなたのテーブル内の同じ順序である場合documentation

+0

私は正確にID番号だけで顧客の名前を表示する私のプログラムを得るために私は言ったし、その後、メソッドのビットで私は[ラベルのsetValueの名前]と言うだろう理解する場合; ? – GBSingh

+0

待って...あなたはIDの意味ですか? http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocObjectsClasses.htmlオブジェクト識別子またはインターナショナルカスタマーID? – Kuba

+0

私は各顧客に与えられたID番号を意味します – GBSingh

0

をお読みください。そのコードの最初の

+0

申し訳ありませんが、私は完全な初心者ですので、私は何をしなければならないのか分かりません。私は新しいオブジェクトとクラスを作成し、それらをリンクしますか?私は何をインターフェイスにリンクしますか?私はあなたが何をしようとしているのかを見ることができるように、顧客クラスコードとテーブルデータソースコードを入れます。ありがとう – GBSingh

0

:カスタマー*顧客へ

-(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]; 
    } 

変更カスタマー*顧客は常にその方法を使用します。

次に、そのメソッドを使用して、選択された行がどのような顧客であるかを理解します。私はあなたのコードから、すべての行にcostumerがあり、それらの顧客があなたのリスト配列に入っていることを理解しています。

- (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]]; 

    } 

次に、お客様の値に達することができます。

+0

こんにちは。答えに感謝します。しかし、私は何をしようとすると、私は2つのエラーを取得しようとします。もう一つは: 'NSUInteger'(aka 'unsigned long')型のパラメータに 'id'を送信する整数変換へのポインタ互換性のないポインタです:インスタンスメソッド '-row'が見つかりません(戻り値の型は 'id'また、私はこれをやった後、IDNumber(memberNumber)に応じて顧客の名前をどのように表示するのですか?もう一つこれは私が顧客*顧客をしなければならないことを私に教えてくれてありがとう。それはちょうどコンベンションですか?ありがとう – GBSingh

+0

あなたは顧客memberIdを取得したいと思う薄い。私のケースコードはcustomer.memberIdになりますが、あなたのcasa Customer.memberIdにはエラーが発生します。シングルトンクラスのように動作することができます。正しい値を得ることはできません。 [indexPath row]をindexPath.rowに変更してみてください – mhunturk

+0

これはiOSまたはOS Xの回答です.iITableViewはiOS用です – GBSingh

関連する問題