我是iOS开发人员的新手,我遵循了一个简单的UITableview和详细视图的教程。

这设置了我的数组:

- (void)viewDidLoad
{
    [self setupArray];
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)setupArray
{
    states = [[NSMutableDictionary alloc]init];
    [states setObject:@"Thing 1" forKey:@"Subject 1"];
    [states setObject:@"Thing 2" forKey:@"Subject 2"];
    [states setObject:@"Thing 3" forKey:@"Subject 3"];
    [states setObject:@"Thing 4" forKey:@"Subject 4"];

    datasource = [states allKeys];
}

我有工作单元和详细视图。如何在密钥中添加更多对象?那可能吗?我需要每个主题[键]都具有许多属性(例如,事物,人物,位置,颜色)...

您能为我分解成最简单的术语吗?谢谢!

最佳答案

我不确定是否理解您的问题,但每个键只能有一个与之关联的对象。就您而言,您正在使用NSString对象。如果用创建的某个对象(例如AnObjectWithAThingAndAPersonAndAPlace)替换了NSString,则每个键可能具有多个属性。

我想我现在明白你想要什么。您想要的不是具有与其关联的数组的对象,而是一个对象数组。您可以使用NSDictionary对象来实现。

- (void)setupArray
{
    NSMutableArray *objectArray = [[NSMutableArray alloc] init];

    NSMutableDictionary *object1 = [[NSMutableDictionary alloc] init];
    [object1 setObject:@"Apple" forKey:@"thing"];
    [object1 setObject:@"Alex" forKey:@"person"];
    [object1 setObject:@"Alabama" forKey:@"place"];
    [object1 setObject:@"Azure" forKey:@"color"];
    [objectArray addObject:object1];

    NSMutableDictionary *object2 = [[NSMutableDictionary alloc] init];
    [object2 setObject:@"Banana" forKey:@"thing"];
    [object2 setObject:@"Bill" forKey:@"person"];
    [object2 setObject:@"Boston" forKey:@"place"];
    [object2 setObject:@"Blue" forKey:@"color"];
    [objectArray addObject:object2];

    datasource = [NSArray arrayWithArray:objectArray];
}

然后在您的UITableViewDataSource方法中
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSInteger row = [indexPath row];
    NSDictionary *object = [datasouce objectAtIndex:row];

    ...

}

您可以检索该对象的所有字符串。

如果我要做这样的事情,我可能会创建一个包含数组的plist文件。然后,您的setupArray方法可能如下所示:
- (void)setupArray
{
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"YourFileName" ofType:@"plist"];
    NSDictionary *plistData = [NSDictionary dictionaryWithContentsOfFile:filePath];
    datasource = (NSArray*)[plistData objectForKey:@"ObjectsForTableView"];
}

我虽然会再添加一些注释...以防万一,添加到字典中的对象不必是NSStrings,它们可以是任何对象,例如NSNumber,这可能会有用对于您的棒球运动员而言。另外,您可能希望创建一个自定义播放器对象,而不是使用NSDictionary。而且,您可能希望拥有一个像Core Data数据库这样的东西,用来存储和检索播放器(而不是对它们进行硬编码或从plist文件中获取它们)。我希望我的回答能使您正确地开始。

关于iphone - UITableview和数据源为NSMutableArray,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9343496/

10-11 13:48