我是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];
}
我有工作单元格和详细视图。如何在键上添加更多对象?那可能吗?我需要每个主题[key]都有很多属性(即一个东西,一个人,一个地方,一个颜色)......
你能否将这一点分解为最简单的条款?谢谢!
答案 0 :(得分:3)
我不确定我是否理解你的问题,但每个密钥只能有一个与之关联的对象。在您的情况下,您正在使用NSString对象。如果您使用您创建的某个对象替换NSString,例如AnObjectWithAThingAndAPersonAndAPlace,则可以将多个属性与每个键关联。
我想我明白你现在想要的东西。你想要的不是一个与它相关联的数组的对象,而是一个对象数组。您可以使用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。而且你可能希望拥有类似于核心数据数据库的东西,其中存储和检索玩家(而不是硬编码或从plist文件中获取它们)。我希望我的回答可以让你开始走上正确的道路。
答案 1 :(得分:0)
现在您的datasource
对象是NSArray。你需要使它成为一个NSMutableArray。在头文件中将其声明为NSMutableArray,然后您可以执行此操作:
datasource = [[states allKeys] mutableCopy];
[datasource addObject:whatever];
但是,听起来你实际上正在寻找的结构是NSDictionary对象的NSMutableArray。像这样:
NSDictionary *item = [NSDictionary dictionaryWithObjectsAndKeys:@"object1", @"key1", @"object2", @"key2", nil];
[datasource addObject:item]
答案 2 :(得分:0)
有很多方法(比你给出的例子更好)来做到这一点。但我会效仿你的榜样。
您正在为密钥分配 NSString对象。
您可以做的是创建一个包含所有属性的 Thing 类。并将该类的实例分配给您的密钥。即
[states setObject:myThingObject forKey:@"Subject 4"];
然后将 myThingObject 传递给详细信息视图。
更新:
Thing 类包含以下属性:
- person
- place
- color
- thingName
所以,
[states setObject:@"Thing 1" forKey:@"Subject 1"];
变为
[states setObject:firstObject forKey:@"Subject 1"];
[states setObject:secondObject forKey:@"Subject 2"];
注意firstObject& secondObject是 Thing 类
的实例要了解有关Objective-c中课程的更多信息,请访问: