Мне хотелось бы рассказ много предметов в одном объекте (имя пользователя, его фотография и время, когда фотография была сделана). Я попытался использовать три разных массива, чтобы сделать это, и это работает, но поскольку я загружаю это в tableview, это не лучший способ сделать это. Я думаю об использовании NSMutableDictionary, но я не могу это сделать. Любая помощь будет оценена!Как рассказывать несколько значений для одного объекта в NSMutableDictionary?
ответ
Что вы хотите сделать, это создать пользовательский объект (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];
Вы можете сделать так.
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.
Структура данных за 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
сделать вы хотите использовать его в стрижа? или Obj C? – Jamil
@ jamil65able это не имеет значения, API 'NSMutableDictionary' не зависит от языка. –
Справа. Я дал вам фрагмент кода, который вы можете попробовать. – Jamil