2015-08-29 2 views
1

Мне хотелось бы рассказ много предметов в одном объекте (имя пользователя, его фотография и время, когда фотография была сделана). Я попытался использовать три разных массива, чтобы сделать это, и это работает, но поскольку я загружаю это в tableview, это не лучший способ сделать это. Я думаю об использовании NSMutableDictionary, но я не могу это сделать. Любая помощь будет оценена!Как рассказывать несколько значений для одного объекта в NSMutableDictionary?

+0

сделать вы хотите использовать его в стрижа? или Obj C? – Jamil

+0

@ jamil65able это не имеет значения, API 'NSMutableDictionary' не зависит от языка. –

+0

Справа. Я дал вам фрагмент кода, который вы можете попробовать. – Jamil

ответ

1

Что вы хотите сделать, это создать пользовательский объект (Swift/Objective-C Class) с полями имени пользователя, фото и фото.

Создайте пользователей, поместите их в массив и затем прочитайте из него, когда вы создаете таблицу в 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]; 
[email protected]"someUserName" 
[email protected]"http://somephotourl.com"; 
[email protected]"1231232132121"; 

[usersArray addObject:user]; 
+0

Не могли бы вы объяснить это немного больше? – Nil2k15

+0

В Swift я использовал бы структуру вместо класса для этого, более эффективную и не нужно беспокоиться о том, что вещи хранятся в памяти неожиданно. – stone

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"]); 
} 

Примечание: Я думаю, вам нужно использовать «NSMutableArray» из NSDictionary. если вы все пользовательское свойство (имя пользователя, фотография, время ...) непредсказуемы, вам нужно использовать только NSMutableDictionary.

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"] = ... 

Instantiate 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