0

Xcodeの学習を始めたばかりで、本を読み、読んだものを実装しようとしています。アプリは特定のデータを配列とディクショナリに保存する必要があり、テーブル ビューはセクション数、行数を自動的にカウントし、キーワードに割り当てられたコンテンツをテーブル セルに入力することによってデータを抽出します。

アプリを実行しようとしているので、コードを参照してください。ただし、SIGABRT エラーが発生します。新しい Xcode がこのように宣言または呼び出しを行っていないかどうかはわかりません (私の本は iOS3 用です)。ブログや YouTube から解決策を見つけようとしましたが、この時点ではアプリはまだ実行されていません。AppDelegateファイルなどですべて正しく宣言したことはわかっています。これは、誰かの1つの配列のサンプルコードを使用したためです。そして、テーブルビューにデータが取り込まれました。

NSMutableDictionary と indexPath を使用したコードに問題があるため、助けてください。ありがとうございました!

#import "TableViewController.h"


@implementation TableViewController
@synthesize tableData;
@synthesize tableSections;

#pragma mark - View lifecycle

- (void)viewDidLoad
{ [self createData];
[super viewDidLoad];
}
-(void)createData{

NSMutableArray *category1;
NSMutableArray *category2;

category1=[[NSMutableArray alloc] init];
category2=[[NSMutableArray alloc] init];

  tableSections=[[NSMutableArray alloc] initWithObjects:@"Category 1", @"Category 2", nil];   

tableData=[[NSMutableArray alloc] initWithObjects:category1, category2, nil];


[category1 addObject:[[NSMutableDictionary alloc]
                               initWithObjectsAndKeys:@"TitleA", @"name",@"A",@"property", nil]];
[category1 addObject:[[NSMutableDictionary alloc]
                               initWithObjectsAndKeys:@"TitleB", @"name",@"B",@"property", nil]];

[category2 addObject:[[NSMutableDictionary alloc]
                               initWithObjectsAndKeys:@"TitleC", @"name",@"C",@"property", nil]];

[category2 addObject:[[NSMutableDictionary alloc]
                               initWithObjectsAndKeys:@"TitleD", @"name",@"D",@"property", nil]];

}



#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [tableSections count];
//return [self.tableSections count];      Also tried to use with self. Don’t know which one is correct
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{    
return [[self.tableSections objectAtIndex:section] count]; 
}

- (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 = [[[tableData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] objectForKey:@"name"];


/* Also tried this:
tableData *cellObj = [[self.tableData objectAtIndex:indexPath.section]objectAtIndex:indexPath.row];
cell.textLabel.text = cellObj.name;   

/* Also tried this:
tableData *cellObj= [[[self.tableData objectAtIndex:indexPath.section]objectAtIndex:indexPath.row]objectForKey:@"name"];
cell.textLabel.text=smsObj.name;   */


/* Also tried this:
NSDictionary *item = (NSDictionary *)[self.tableData objectAtIndex:indexPath.row];
cell.textLabel.text = [item objectForKey:@"name"];*/


/* Also tried this way:
NSDictionary *dictionary = [tableData objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"name"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
cell.text = cellValue;    

And the same way, but switched order of NSArray and NSDictionary*/



return cell;
}


#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// This I will add later, after I make my Table View Controller work
}

@end

私はコードで非常にばかげたことをしていることを知っていますが、コードを書く正しい方法を理解しようとしています...

4

1 に答える 1

0

[category1 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleA", @"name",@"A",@"property", nil]]; [category1 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleB", @"name",@"B",@"property", nil]];

[category2 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleC", @"name",@"C",@"property", nil]];

[category2 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleD", @"name",@"D",@"property", nil]];

}

これらの配列の初期化後にこのコードを追加して試してください

于 2012-02-08T06:59:51.687 に答える