我有ItemSore.m
:
-(instancetype)initPrivate
{
NSArray *operatorUS = @[@"AT&T", @"Verizion"];
NSArray *operatorRU = @[@"MTS", @"Megafon"];
NSArray *operatorFR = @[@"Orange", @"SFR"];
NSArray *operatorAE = @[@"Etisalat", @"Du"];
self = [super init];
if (self) {
_privateItems = @{@"USA":operatorUS, @"Russia":operatorRU, @"France":operatorFR, @"UAE":operatorAE};
}
return self;
}
声明方法:
-(NSArray *)allProviders
{
return [self.privateItems allValues];
}
在我的ItemsViewController
didSelectRowAtIndexPath:
中,我将值传递给pushViewController,如下所示:
NSArray *items = [[MSTItemStore sharedStore] allProviders];
MSTItemStore *selectedItem = items[indexPath.row];
providerViewController.item = selectedItem;
在providerViewController
的{{1}}(pushViewController)中,我尝试这样做:
cellForRowAtIndexPath:
但在单元格中我只得到#34;("没有文字。问题是什么? 感谢
答案 0 :(得分:0)
这里的问题是你的_item
是NSArray
(在第一个控制器上选择了一个运算符)。因此,假设您想要获取运算符名称并将其显示在单元格中,并且假设_item
是数据源数组,则应该执行以下操作:
cell.textLabel.text = self.item[indexPath.row];
编辑(OP关于indexPath.row
的评论后)
这个self.item究竟是什么意思[indexPath.row]?
好吧,让我们来看看你的item
。假设您已在第一个控制器上选择operatorUS
。你的第二个控制器中的item
是这样的:
(
"AT&T", // <= index 0
Verizion // <= index 1
)
现在,您的tableView:numberOfRowsInSection:
方法应如下所示:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.item.count;
}
其中说明'对于x
部分,我有n
行'。由于您只有一个部分,因此您只需计算item
中包含的运算符并将其返回。
最后,在cellForRowAtIndexPath:
indexPath
(一个指定某一节的给定行的对象)传递给您,然后返回基于此indexPath配置的单元格,其中{{1} }是与indexPath.row
对应的行的索引(同样,您只有一个部分)。因此,最终该方法将被调用2次(indexPath.section
),self.item.count
将被indexPath.row
和0
调用。我希望这是有道理的......
答案 1 :(得分:0)
NSString *firstString = items[indexPath.row][0];
NSString *secondString = items[indexPath.row][1];
答案 2 :(得分:-1)
那是因为你的_item是数组。在_item里面你有你的操作员阵列。防爆。如果你这样做
items[indexPath.row];
对于单元格0,您有一个operatorUS数组。然后你应该做这样的事情:
cell.textLabel1.text = self.items[0]; //return AT&T
cell.textLabel2.text = self.items[1]; //return Verizion