0

私のxcodeプロジェクトではviewtableview. また、テーブルビューを設定する配列に設定するオブジェクトを含む「特別な」文字列もあります。例:

NSString *myValues=[[NSString alloc]init]; 
myValues = @"aaa$bbb$ccc?111$222$333?";

$ と ? の文字を見ることができます。オブジェクトを分離します。ビューを呼び出すと、配列に文字列が入力されますが、テーブルビューは機能しません。ここにいくつかのコード:

ファイル.H:

#import <UIKit/UIKit.h>

@interface EquipaggioVC : UIViewController <UITableViewDelegate, UITableViewDataSource>{
    UITableView *tableViewEquipaggio;
    UITableViewCell *nibLoadedCell;

    NSMutableArray *arrayEquipaggio;

    NSString *stringaDati;
}
@property (nonatomic, retain) IBOutlet UITableView *tableViewEquipaggio;
@property (nonatomic, retain) IBOutlet UITableViewCell *nibLoadedCell;
@property (nonatomic, retain) NSMutableArray *arrayEquipaggio;
@property (nonatomic, retain) NSString *stringaDati;

@end

File.M:

#import "EquipaggioVC.h"
#import "AppDelegate.h"
#import "ClassEquipaggio.h"
@interface EquipaggioVC ()

@end

@implementation EquipaggioVC
@synthesize tableViewEquipaggio;
@synthesize nibLoadedCell;
@synthesize arrayEquipaggio;
@synthesize stringaDati;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

-(NSString *)uuid
{
    //to create an ID
    CFUUIDRef uuidRef = CFUUIDCreate(NULL);
    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef);
    CFRelease(uuidRef);
    return [(NSString *)uuidStringRef autorelease];
}
-(void)loadTestData:(NSString*)stringaDatiArray{

//populate the array by the string.
    if(stringaDatiArray!=nil){
        NSArray *elenco=[stringaDatiArray componentsSeparatedByString:@"?"];

        for (int i=0; i<([elenco count]-1) ; i++) {

            NSString *dettagliEquipaggio=[[NSString alloc]init];

            dettagliEquipaggio=[elenco objectAtIndex:i];
            NSArray *dettagli=[dettagliEquipaggio componentsSeparatedByString:@"$"];
            ClassEquipaggio *aEquipaggio=[[ClassEquipaggio alloc]init];
            aEquipaggio.idMembro=[dettagli objectAtIndex:0];
            aEquipaggio.sessoMembro=[dettagli objectAtIndex:1];
            aEquipaggio.dataNascitaMembro=[dettagli objectAtIndex:2];

            [arrayEquipaggio addObject:aEquipaggio];
            [aEquipaggio release];

        }
    }

}


- (UITableViewCell *)tableView:(UITableView *)tableEquipaggioView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    static NSString *sLoadNibNamed;
    UITableViewCell *cell;


    ClassEquipaggio *aEquipaggio=[arrayEquipaggio objectAtIndex:indexPath.row];
    cell = [tableEquipaggioView dequeueReusableCellWithIdentifier:CellIdentifier];
    sLoadNibNamed=@"EquipaggioCell";


    if (cell == nil) {

        [[NSBundle mainBundle] loadNibNamed:sLoadNibNamed owner:self options:NULL];
        cell = [self typeNibLoadCell:aEquipaggio.idMembro];
    }

    // Configure the cell
    UILabel *tipoSessoLabel = (UILabel*) [cell viewWithTag:1];
    tipoSessoLabel.text = aEquipaggio.sessoMembro;

    UILabel *dataNascitaLabel=(UILabel*)[cell viewWithTag:2];
    dataNascitaLabel.text=aEquipaggio.dataNascitaMembro;

    return cell;
}




-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{
    return [arrayEquipaggio count];
}
-(UITableViewCell *)typeNibLoadCell:(NSString *)named{
    return nibLoadedCell;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return NO;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    arrayEquipaggio=[[NSMutableArray alloc]init];
    stringaDati=[[NSString alloc]init];
    tableViewEquipaggio=[[UITableView alloc]init];

}


-(void)viewDidAppear:(BOOL)animated{
    AppDelegate *appDelegate=(AppDelegate*)[[UIApplication sharedApplication]delegate];

    UIBarButtonItem * btnIndietroa = [[[UIBarButtonItem alloc] initWithTitle:@"Indietro"
                                                                       style:UIBarButtonItemStyleBordered
                                                                      target:self
                                                                      action:@selector(editNavButtonPressed)]autorelease];

    [self.navigationItem setLeftBarButtonItem:btnIndietroa];
    stringaDati = [[NSUserDefaults standardUserDefaults] objectForKey:@"stringaDati"];

    if(stringaDati!=nil){

        [arrayEquipaggio removeAllObjects];
        [self loadTestData:stringaDati];
    }

}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
-(void)dealloc{
    [super dealloc];
}
@end

nib ファイルでは、 IBoutlet が接続されているため、 tableview はdelegateおよびdatasourceと接続されています。

ご協力ありがとうございました。

編集: [arrayEquipaggio count]0 を返します。

4

1 に答える 1

0

あなたの質問の見た目によると、あなたの問題は、メソッドcellForRowAtIndexPathが呼び出されておらず、あなたが言ったように[arrayEquipaggio count]return0です。

メソッドでその配列をnumberOfRowsInSection戻り値で使用しているため0 、テーブルがメソッドを呼び出していないのは正常ですcellForRowAtIndexPath。行がないことをテーブルに伝えているためです。

テーブルにデータを入力したい場合は、配列が より大きい値を返すことを確認してください0

一言で言えば、テーブルに入力するデータがないため、機能しません。

viewDidAppear:(BOOL)animatedに何かを引っ張っていることを確認してくださいstringaDati

NSLog(@"info: %@",stringaDati);
于 2013-05-21T13:32:22.670 に答える