Obj C - 使用数组

时间:2016-08-13 20:41:52

标签: objective-c arrays uitableview

我想在特定索引处使用来自数组的对象填充TableView。我想我可以通过循环insertObject行并将我想要填充TableView的对象(在特定索引处)添加到新数组然后使用新数组填充tableView但最后添加新数组是零。

第一个阵列是这样的布局:电子邮件,名称,密钥代码,电子邮件,名称,密钥代码,电子邮件,名称,密钥代码等......所以我想填充第二个数组只是密钥代码,然后使用密钥代码数组并用它填充表

这是我到目前为止所做的:

·H

@property(nonatomic) NSArray *productList;
@property(nonatomic) NSMutableArray *productKeycodes;

的.m

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
// If You have only one(1) section, return 1, otherwise you must handle sections
return 1;
}




- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:   (NSInteger)section
 {
// Return the number of rows in the section.
return [self.productList count] / 3;
 }





- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}



self.productKeycodes = [NSMutableArray new];

bool flag = true;
int index = 3;
int arraySize = [self.productList count];
int numberOfKeycodes = [self.productList count] / 3;

while (flag) {

    self.productKeycodes = [self.productList objectAtIndex: index];

    //[self.productKeycodes insertObject: self.productList atIndex: index];

    if (arraySize > numberOfKeycodes) {
        index = index + 3;
        arraySize = arraySize - 3;
    }else{
        flag = false;
    }
}


cell.textLabel.text = [NSString stringWithFormat:[self.productKeycodes objectAtIndex: indexPath.row]];

return cell;
}

循环完成后的断点数据:

self    ProductListViewController * 0x7a2831c0
UIViewController    UIViewController    
_productListTableView   UITableView *   0x7b30c400
_productList    __NSArrayM *    @"49 elements"  0x78ebe380
_productKeycodes    NSMutableArray *    nil 0x00000000
numberOfKeycodes    int 16
index   int 26
arraySize   int 13
flag    bool    true

此处出现signal SIGABRT错误:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
//The line below
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));//Here!
//The line above
    }
}

是我的逻辑错误和/或有没有更好的方法来做到这一点?谢谢!

3 个答案:

答案 0 :(得分:0)

你的逻辑错了。

如果要在表格视图中添加内容,则需要执行以下操作:

  1. 更新您的数据源,例如productList
  2. 完成数据源更新后,请致电self.tableView.relaodData()
  3. 这就是您需要做的就是将数据插入UITableView

答案 1 :(得分:0)

tableView:cellForRowAtIndexPath:中的所有代码替换为:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
    }
    cell.textLabel.text = self.productList[indexPath.row * 3 + 2];
    return cell;
}
//

答案 2 :(得分:0)

有更好的方法可以做到这一点

为什么要将计数除以3并混淆索引和标记?

如果您有充分理由可以,但填充tableview的代码不应属于cellForRowAtIndexPath

您尝试实现的目标尚不清楚,但正确的方法是更新数据源并重新加载tableView