如何从ID号获取对象实例的信息

时间:2012-04-13 07:15:34

标签: objective-c xcode cocoa instance tableview

我有一个程序,在两个不同的窗口上有2个表。一个表保存客户名称和ID号,另一个表保存项目名称和编号。它们都存储在一个数组中,也存储在.plist文件中。

我想要做的是在第三页上会有一个销售页面,用户将在其中输入客户ID和项目ID,程序应该能够找到名称并将其显示给标签。我不知道从哪里开始走。有人可以帮忙或告诉我该怎么办吗?我可以上传任何人想要查看的代码,但由于我不知道从哪里开始,我不知道要上传什么 这是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  

这是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

这是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

这是tableView.m文件

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

3 个答案:

答案 0 :(得分:0)

例如:

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

检查对象myNumber是否为NSNumber类Object。你当然可以使用你想要的任何课程。阅读documentation

答案 1 :(得分:0)

如果您加载到表中的项目与表格中的订单相同,则可以使用

    [myArray objectAtIndex:[indexPath row]];

然后使用可以使用您需要的数组变量。

答案 2 :(得分: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];
   }

将客户*客户更改为客户*客户始终使用该方式。

然后使用该方法来了解选择哪一行。在您的情况下选择哪个客户。我从您的代码中了解到,每一行都有一个客户,而这些客户都在您的列表数组中。

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

    }

然后您就可以达到客户的价值。