【问题标题】:IndexPath.row on a button?IndexPath.row 在按钮上?
【发布时间】:2013-06-24 08:05:15
【问题描述】:

我有一个应用程序,您可以在其中包含某些事物的一些细节,然后在该事物中您有一个事物的子类别。我制作了一个按钮,因为导航项没有足够的空间,而且我似乎无法仅调用在我的 nsmutablearray 中分配给它的项目。我尝试使用initWithIndexPath:indexPath.row,尽管它出现了这个错误:

使用未声明的标识符“indexPath”;你的意思是“NSIndexPath”

这是我 tableView 中的 tableView 的代码:

#import "PRViewController.h"

#import "Patient.h"

#import "LSAppDelegate.h"

#import "LSViewController.h"

#import "LSAppDelegate.h"

#import "Patient.h"

#import "PatientController.h"

#import "AddPatientController.h"

#import "treatmentController.h"

@interface PRViewController ()

@end

@implementation PRViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    self.title = @"Treatments";
    LSAppDelegate *delegate = (LSAppDelegate *)[[UIApplication sharedApplication] delegate];
    patients = delegate.patients;
    [[UIToolbar appearance] setTintColor:[UIColor brownColor]];
    // Do any additional setup after loading the view, typically from a nib.
}

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

-(IBAction)add:(id) sender{

    [self.tableView reloadData];
    [self.tableView setEditing:YES animated:YES];
    if(self.tableView) {
        NSMutableArray *indices = [[NSMutableArray alloc] init];
        for (int i=0; i < patients.count; i++) {
            [indices addObject:[NSIndexPath indexPathForRow:i inSection:0]];

        }
        NSArray *lastIndex = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:patients.count inSection:0]];
        if (self.tableView) {
            for (int i=0; i < patients.count; i++) {
                UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[indices objectAtIndex:i]];
                [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];
            }
        }
    }
    [self.tableView setEditing:NO animated:YES];
    treatmentController *AddPatient = [[treatmentController alloc] init];
    [self.navigationController pushViewController:AddPatient animated:YES];
    [super setEditing:NO animated:NO];
}

-(void)setEditing:(BOOL)editing animated:(BOOL) animated {
    if ( editing != self.editing ) {
        [super setEditing:editing animated:animated];
        [self.tableView setEditing:editing animated:animated];

    }
}

#pragma mark UITableViewDataSource Methods

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:@"cell"];
    if ( nil == cell ) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }

    NSLog(@"indexPath.row = %d, patients.count = %d", indexPath.row, patients.count);
    Patient *thisPatient = [patients objectAtIndex:indexPath.row];
    if (thisPatient.treatmentName.length > 0) {
        cell.textLabel.text = thisPatient.treatmentName;
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        cell.textLabel.textColor = [UIColor blackColor];
    } else {

    }
    if (self.editing) {
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    }
    return cell;
}

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

#pragma mark UITableViewDelegate Methods

- (void) tableView:(UITableView *)tv commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if ( editingStyle == UITableViewCellEditingStyleDelete ) {
        [patients removeObjectAtIndex:indexPath.row];
        [tv deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
    }
}

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    LSAppDelegate *delegate = (LSAppDelegate *)[[UIApplication sharedApplication] delegate];
    PatientController *patient = [[PatientController alloc] initWithIndexPath:indexPath];
    [delegate.navController pushViewController:patient animated:YES];
    [tv deselectRowAtIndexPath:indexPath animated:YES];
}
@end

如果您需要更多代码或信息,请说出来,请尽快回答

我正在按下的按钮的文件:

#import "PatientController.h"

#import "LSAppDelegate.h"

#import "Patient.h"

#import "PRViewController.h"

@interface PatientController ()

@end

@implementation PatientController



- (id)initWithIndexPath:(NSIndexPath *)indexPath {

    if ( ( self = [super init]) ) {
        index = indexPath;
    }
    return self;
}

- (IBAction)PatientRecords:(id)sender {
    PRViewController *AddPatient = [[PRViewController alloc] initWithIndexPath:indexPath.row];
    [self.navigationController pushViewController:AddPatient animated:YES];

}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    LSAppDelegate *delegate = (LSAppDelegate *)[[UIApplication sharedApplication] delegate];
    Patient *thisPatient = [delegate.patients objectAtIndex:index.row];
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    self.title = thisPatient.patientName;
    patientNameView.text = thisPatient.patientName;
    patientFirstNameView.text = @"Firstname:";
    patientSurnameView.text = thisPatient.patientSurname;
    patientSurnameNameView.text = @"Surname:";
    patientDoBView.text = thisPatient.patientDoB;
    patientDoBDateView.text = @"Date of Birth:";
    patientHomeView.text = thisPatient.patientHomeNumber;
    patientHomeNumberView.text = @"Home No:";
    patientMobileView.text = thisPatient.patientMobileNumber;
    patientMobileNumberView.text = @"Mobile No:";
    patientAddressView.text = thisPatient.patientAddress;
    patientAddressView.editable = NO;
    patientAddressPlaceNumberView.text = @"Address:";
    patientEmailView.text = thisPatient.patientEmail;
    patientEmailAddressView.text = @"Email:";

    patientPictureView.image = thisPatient.patientPicture;
    // Do any additional setup after loading the view from its nib.
}

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

-(void)setEditing:(BOOL)editing animated:(BOOL) animated {
    if ( editing != self.editing ) {
        [super setEditing:editing animated:animated];
        patientAddressView.editable = YES;
    }
}

@end

提前致谢

【问题讨论】:

  • 你的应用程序崩溃的地方。
  • 请澄清您的UIElements。这个some details of something and then inside that thing 非常模糊。
  • 我把额外的tableView的代码坑了
  • 我要出去,大概4:10回来
  • 您还没有变量 indexPath。此外,您尝试使用indexPath.row,它是一个整数,作为NSIndexPath 类型的参数。这无论如何都行不通。

标签: ios objective-c uitableview nsmutablearray


【解决方案1】:
- (IBAction)PatientRecords:(id)sender {
    PRViewController *AddPatient = [[PRViewController alloc] initWithIndexPath:indexPath.row];
    [self.navigationController pushViewController:AddPatient animated:YES];
}

这段代码看起来是罪魁祸首,你没有在任何地方声明变量indexPath,据我所知,你需要使用index而不是indexpath

【讨论】:

    【解决方案2】:
    Use of undeclared identifyer "indexPath"; did you mean "NSIndexPath"
    

    此错误仅在您未声明 indexPath 但尝试使用它时发生。由于 Xcode 编译器的代码感知检测并向您显示它可能是 NSIndexPath 而不是 indexPath。检查 indexPath 的使用和声明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多