如何在NSMutableDictionary中为一个对象编写多个值?

时间:2015-08-29 04:37:19

标签: ios object nsmutabledictionary

我想在一个对象中记录许多项目(用户名,照片和照片拍摄时间)。我试图使用三个不同的数组来做这个,它有点工作,但是因为我将它加载到tableview中它不是最好的方法来做到这一点。我正在考虑使用NSMutableDictionary,但我似乎无法做到这一点。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

您要做的是使用用户名,照片和照片时间字段创建用户实体(Swift / Objective-C类)。

创建用户,将它们放入数组中,然后在cellForRowAtIndexPath创建表时读取它们。

@interface User : NSObject

@property (nonatomic, retain) NSString *userName;
@property (nonatomic, retain) NSString *photoURL;
@property (nonatomic, retain) NSString *photoTime;

@end

然后在代码中的某个位置创建用户......

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

User *user= [[Useralloc] init];
user.userName=@"someUserName"
user.photoURL=@"http://somephotourl.com";
user.photoTime=@"1231232132121";

[usersArray addObject:user];

答案 1 :(得分:1)

你可以这样做。

NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:
                     @"Jone",@"UserName",
                     @"Jone.png",@"Photo",
                     [NSDate date],@"Time",nil];

NSMutableArray *userArray = [[NSMutableArray alloc] init];
[userArray addObject:dic];
//NSLog(@"%@",userArray);

for (int i=0; i<userArray.count; i++) {
    NSDictionary *userDictionary = [userArray objectAtIndex:i];
    NSLog(@"UserName:%@",[userDictionary valueForKey:@"UserName"]);
    NSLog(@"Photo:%@",[userDictionary valueForKey:@"Photo"]);
    NSLog(@"Time:%@",[userDictionary valueForKey:@"Time"]);
}

注意:我认为你需要使用NSDictionary的“NSMutableArray”。如果您所有的用户属性(用户名,照片,时间......)都是不可预测的,那么您只需要使用NSMutableDictionary。

答案 2 :(得分:1)

UITableView背后的数据结构通常是NSArray或某种列表。数组中的每个对象都应该代表表中的一行 遵循此模式,您的结构应如下所示:

var users = [User]()

struct User {
    let name: String
    let photo: UIImage
    let date: NSDate
}

// This struct could also be a dictionary
var user = [String: AnyObject]()
user["name"] = ..
user["photo"] = ..
user["date"] = ...

实例化User个对象,并在适当时将它们添加到users数组中 您的UITableView应该找到正确的用户并相应地使用dataSource方法更新单元格:

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = .. // Dequeue cell

    let user = users[indexPath.row] // Get the user for this row
    cell.textLabel.title = user.name // Update cell properties
    // etc..

    // OR using a dictionary
    cell.textLabel.title = user["name"]
    // etc..

    return cell