2011-04-26 64 views
0

经过10年没有编程(当时在德尔福),我开始学习 Objective-C。我承认我遇到了很多问题,因为这种方法非常不同。NSString中的NSMutableArray

我想做一个简单的表格,其中每行包含几个NSString变量 。举个例子:

ID Firstname Lastname 

01 FN1  LN1 

02 FN2  LN2 

我的表:

NSString * FirstName, * LastName; 

NSMutableArray * person = [NSMutableArray arrayWithObjects: firtsname, lastname, nil]; 

的问题是,我不能添加符合2的NSString,例如:

FirstName = @ "FN1"; 

LastName = @ "LN1"; 

[person AddObject: FirstName, LastName]; 

FirstName = @ "FN2"; 

LastName = @ "LN2"; 

[person AddObject: FirstName, LastName]; 

//etc. ... 

我知道ADDOBJECT能只添加1个对象,但它是解释我的例子的概念。

如何在我的示例中同时添加2个对象?我如何管理/检索对象NString“1”(firstName)& NString“2”(lastName)by index(i);

我承认我无法找到发展的逻辑,你的回应会非常有帮助。

非常感谢您的回复。


编辑:

我有一个奇怪的问题。我.M:

Person *pers = [[Person alloc]init]; 

NSMutableArray *myarray = [[NSMutableArray alloc] init]; 

[pers setFirstName:@"FN 1"]; // = pers.firstName; 
[pers setLastName:@"LN 1"]; // = pers.lastName; 
[myarray addObject:pers]; 

[pers setFirstName:@"FN 2"]; 
[pers setLastName:@"LN 2"]; 
[myarray addObject:pers]; 

[pers release]; 

NSLog(@"count: %d", [myarray count]); 

for(int i = 0; i < [myarray count]; i++) 
    { 
    pers = [myarray objectAtIndex:i]; 
    NSLog(@"%d %@ %@ %@", i, pers, pers.firstName, pers.lastName); 
    } 

[myarray release]; 

和我的NSLog是: 2011-04-27 19:07:57.582临时[11724:903]数:2

2011-04-27 19:07:57.584温度[11724:903] 0 FN 2 LN 2

2011-04-27 19:07:57.585温度[11724:903] 1 FN 2 LN 2

正如你可以看到,我有FN 2 LN 2次两次。对象“pers”具有两倍相同的值

正常吗?

回答

2

这样做会炮制出一个非常简单的模型类的最简单方法:

“Person.h”

#import <Foundation/Foundation.h> 

@interface Person : NSObject { 
    NSString *firstName; 
    NSString *lastName; 
} 

@property (readwrite, copy) NSString *firstName; 
@property (readwrite, copy) NSString *lastName; 

@end 

“Person.m”

#import "Person.h" 

@implementation Person 

@synthesize firstName, lastName; 

- (void)dealloc 
{ 
    [firstName release]; 
    firstName = nil; 

    [lastName release]; 
    lastName = nil; 

    [super dealloc]; 
} 

@end 

这将允许您使用addObject:,因为它在技术上只是一个对象,您只能将多个数据存储在其中。示例如下:

//... 
Person *p1 = [[Person alloc] init]; 
[p1 setFirstName:@"First Name"]; 
[p2 setLastName:@"Last Name"]; 

[personArray addObject:p1]; 
[p1 release]; 
//... 

如果你不熟悉@property@synthesize我会recommend this article explaining both


针对编辑,你就可以使用类似下面的值来获得:

Person *peep = [personArray objectAtIndex:i]; 
NSString *firstName = [peep firstName]; //or you could use peep.firstName; 
NSString *lastName = [peep lastName]; 
+0

@迈克尔:你应该更新你的问题要包括你的新代码,并将你的新问题作为评论加入,而不是像这样编辑答案。 – 2011-04-27 23:29:41

+0

不要忘记你的'-dealloc'方法... – 2011-04-27 23:48:45

+0

@Dave更新。我还为问题的新部分添加了一个编辑。 – 2011-04-28 00:04:20

1

试试这个:

NSDictionary *person = [[NSDictionary alloc] initWithObjectsAndKeys: 
         @"Bill", @"Firstname", 
         @"Gates", @"Lastname", nil]; 
NSMutableArray *storage = [[[NSMutableArray alloc] init] autorelease]; 
[storage addObject:person]; 
[person release]; 
相关问题