0

UITableViewコアデータが入力されているがあります。セルをクリックすると、その特定のインデックスにあるデータを編集できる別のビューに移動します。戻ると、システムがクラッシュするか、ラベルに変更が読み込まれません。アイデアはありません。 ?以下のコード

-(void)viewWillAppear:(BOOL)animated 
{    
    searchCriteria = [[NSMutableString alloc] initWithString:@"clientName"];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"clientName" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Client" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];    
    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];

    [self.clientTableView reloadData];
    [super viewWillAppear:animated];    
}

-(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];
    }

    Client * client = [self.fetchedResultsController objectAtIndexPath:indexPath];
    clientNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 250.00, 30.0)];
    clientNameLabel.tag = 1;
    clientNameLabel.backgroundColor = [UIColor clearColor];
    clientNameLabel.textColor = [UIColor whiteColor];
    clientNameLabel.font =  [UIFont boldSystemFontOfSize:13];
    clientNameLabel.text = client.clientName;
    [cell.contentView addSubview:clientNameLabel];

    clientAccountNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(15.0, 35.0, 250.00, 30.00)];
    clientAccountNumberLabel.tag = 2;
    clientAccountNumberLabel.textColor = [UIColor whiteColor];
    clientAccountNumberLabel.backgroundColor = [UIColor clearColor];
    clientAccountNumberLabel.font =  [UIFont boldSystemFontOfSize:13];
    clientAccountNumberLabel.text = client.clientAccountNumber;
    [cell.contentView addSubview:clientAccountNumberLabel];

    clientTelephoneNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(300.0, 0.0, 250, 30.00)];
    clientTelephoneNumberLabel.tag = 3;
    clientTelephoneNumberLabel.textColor = [UIColor whiteColor];
    clientTelephoneNumberLabel.backgroundColor = [UIColor clearColor];
    clientTelephoneNumberLabel.font =  [UIFont boldSystemFontOfSize:13];
    [cell.contentView addSubview:clientTelephoneNumberLabel];

    addressLine1Label = [[UILabel alloc] initWithFrame:CGRectMake(315.0, 35.0, 250, 30.00)];
    addressLine1Label.tag = 4;
    addressLine1Label.textColor = [UIColor whiteColor];
    addressLine1Label.backgroundColor = [UIColor clearColor];
    addressLine1Label.font =  [UIFont boldSystemFontOfSize:13];
    addressLine1Label.text = client.addressLine1;
    [cell.contentView addSubview:addressLine1Label];

    addressLine2Label = [[UILabel alloc] initWithFrame:CGRectMake(315.0, 35.0, 250, 30.00)];
    addressLine2Label.tag = 5;
    addressLine2Label.textColor = [UIColor whiteColor];
    addressLine2Label.backgroundColor = [UIColor clearColor];
    addressLine2Label.text = client.addressLine2;
    addressLine2Label.font =  [UIFont boldSystemFontOfSize:13];
    [cell.contentView addSubview:addressLine2Label];

    addressLine3Label = [[UILabel alloc] initWithFrame:CGRectMake(315.0, 35.0, 250, 30.00)];
    addressLine3Label.tag = 6;
    addressLine3Label.textColor = [UIColor whiteColor];
    addressLine3Label.backgroundColor = [UIColor clearColor];
    addressLine3Label.font =  [UIFont boldSystemFontOfSize:13];
    addressLine3Label.text = client.addressLine3;
    [cell.contentView addSubview:addressLine3Label];

    addressLine4Label = [[UILabel alloc] initWithFrame:CGRectMake(315.0, 35.0, 250, 30.00)];
    addressLine4Label.tag = 7;
    addressLine4Label.textColor = [UIColor whiteColor];
    addressLine4Label.backgroundColor = [UIColor clearColor];
    addressLine4Label.font =  [UIFont boldSystemFontOfSize:13];
    addressLine4Label.text = client.addressLine4;
    [cell.contentView addSubview:addressLine4Label];

    return cell;
}

クラッシュログは次のとおりです。

2012-06-23 17:08:05.541 iSalesForce[11773:15803] no object at index 1 in section at index 0

そして、あなたが役に立つと思うかもしれない他のいくつかのコードは次のとおりです:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [fetchedObjects count];
}

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 70.0;
}
4

1 に答える 1

0

問題は、fetchedResultsControllerが古くなったという事実にある可能性が最も高いです(ARCを使用していますか?そのfetchedResultsControllerは " strong"プロパティですか?

または、単にfetchedResultsControllerにオブジェクトがなく、 " numberOfSectionsInTableView"の実際の内容に関係なく、""メソッドにオブジェクトが1つだけあると主張している可能性がありますfetchedResultsController

この新しく改善された機能を試してください:

-(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];
    }

    if(cell == nil)
    {
        // this should never happen, but just in case...
        NSLog( @"cell is still - unexpectedly - nil" );
    } else {
        if(self.fetchedResultsController == nil)
        {
            NSLog( @"surprise, fetchedResultsController is nil" );
        } else {
            Client * client = nil;
            @try {
                client = [self.fetchedResultsController objectAtIndexPath:indexPath];
            }
            @catch (NSException * e) {
                NSLog( @"exception thrown while trying to fetch something from fetchedResultsController - %@ %@", [e name], [e reason] );
            }
            @finally {
                clientNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 250.00, 30.0)];
                clientNameLabel.tag = 1;
                clientNameLabel.backgroundColor = [UIColor clearColor];
                clientNameLabel.textColor = [UIColor whiteColor];
                clientNameLabel.font =  [UIFont boldSystemFontOfSize:13];
                clientNameLabel.text = client.clientName;
                [cell.contentView addSubview:clientNameLabel];

                clientAccountNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(15.0, 35.0, 250.00, 30.00)];
                clientAccountNumberLabel.tag = 2;
                clientAccountNumberLabel.textColor = [UIColor whiteColor];
                clientAccountNumberLabel.backgroundColor = [UIColor clearColor];
                clientAccountNumberLabel.font =  [UIFont boldSystemFontOfSize:13];
                clientAccountNumberLabel.text = client.clientAccountNumber;
                [cell.contentView addSubview:clientAccountNumberLabel];

                clientTelephoneNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(300.0, 0.0, 250, 30.00)];
                clientTelephoneNumberLabel.tag = 3;
                clientTelephoneNumberLabel.textColor = [UIColor whiteColor];
                clientTelephoneNumberLabel.backgroundColor = [UIColor clearColor];
                clientTelephoneNumberLabel.font =  [UIFont boldSystemFontOfSize:13];
                [cell.contentView addSubview:clientTelephoneNumberLabel];

                addressLine1Label = [[UILabel alloc] initWithFrame:CGRectMake(315.0, 35.0, 250, 30.00)];
                addressLine1Label.tag = 4;
                addressLine1Label.textColor = [UIColor whiteColor];
                addressLine1Label.backgroundColor = [UIColor clearColor];
                addressLine1Label.font =  [UIFont boldSystemFontOfSize:13];
                addressLine1Label.text = client.addressLine1;
                [cell.contentView addSubview:addressLine1Label];

                addressLine2Label = [[UILabel alloc] initWithFrame:CGRectMake(315.0, 35.0, 250, 30.00)];
                addressLine2Label.tag = 5;
                addressLine2Label.textColor = [UIColor whiteColor];
                addressLine2Label.backgroundColor = [UIColor clearColor];
                addressLine2Label.text = client.addressLine2;
                addressLine2Label.font =  [UIFont boldSystemFontOfSize:13];
                [cell.contentView addSubview:addressLine2Label];

                addressLine3Label = [[UILabel alloc] initWithFrame:CGRectMake(315.0, 35.0, 250, 30.00)];
                addressLine3Label.tag = 6;
                addressLine3Label.textColor = [UIColor whiteColor];
                addressLine3Label.backgroundColor = [UIColor clearColor];
                addressLine3Label.font =  [UIFont boldSystemFontOfSize:13];
                addressLine3Label.text = client.addressLine3;
                [cell.contentView addSubview:addressLine3Label];

                addressLine4Label = [[UILabel alloc] initWithFrame:CGRectMake(315.0, 35.0, 250, 30.00)];
                addressLine4Label.tag = 7;
                addressLine4Label.textColor = [UIColor whiteColor];
                addressLine4Label.backgroundColor = [UIColor clearColor];
                addressLine4Label.font =  [UIFont boldSystemFontOfSize:13];
                addressLine4Label.text = client.addressLine4;
                [cell.contentView addSubview:addressLine4Label];

            }

            Client * client = [self.fetchedResultsController objectAtIndexPath:indexPath];
        }
    }
    return cell;
}

(私は実際にこれをテストしませんでした...しかし、私はあなたのためにいくつかの新しいエラーチェックと例外処理をそれに入れました)

于 2012-06-23T15:01:40.973 に答える