0

tableView の要素にヒットすると、エラーが発生します。すべての接続を確認しましたが、まだ解決できません。これが私のコードです

#import "CGViewController.h"

#import "CGAppDelegate.h"

#import "sls.h"

#import "patientController.h"

@interface CGViewController ()

@end

@implementation CGViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = @"Patients";
    CGAppDelegate *delegate =
    (CGAppDelegate *)[[UIApplication sharedApplication] delegate];
    patients = delegate.patients;
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(add:)];
    self.navigationItem.leftBarButtonItem = addButtonItem;
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
#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"];
    }
    if (indexPath.row < patients.count) {
        sls *thissls = [patients objectAtIndex:indexPath.row];
       cell.textLabel.text = thissls.patientName;
    }
        else {
            cell.textLabel.text = @"";
            cell.textLabel.textColor = [UIColor lightGrayColor];
        }
        return cell;
}


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

        NSArray *indexes =
        [NSArray arrayWithObject:
         [NSIndexPath indexPathForRow:patients.count inSection:0]];
        if ( editing == YES ) {
            [self.tableView insertRowsAtIndexPaths:indexes withRowAnimation:UITableViewRowAnimationLeft];
          }  else {
              [self.tableView deleteRowsAtIndexPaths:indexes withRowAnimation:UITableViewRowAnimationLeft];
            }
    }

    [self.tableView reloadData];
}

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row < patients.count ) {
        return UITableViewCellEditingStyleDelete;
    }
    else {
        return UITableViewCellEditingStyleNone;
    }
}

- (NSInteger)tableView:
(UITableView *)tv numberOfRowsInSection:
(NSInteger)section {
    NSInteger count = patients.count;
    if (self.editing) {
        count = count + 1;
    }
    return count;
}

-(void)tableView:(UITableView *)tv didSelectRowAtIndexPath:
(NSIndexPath *)indexPath {
    CGAppDelegate *delegate =
    (CGAppDelegate *)[[UIApplication sharedApplication] delegate];
    patientController *patient = [[patientController alloc] init];
    [delegate.navController pushViewController:patient animated: YES];

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

締め切りが近づいているので、できるだけ早く助けてください。

前もって感謝します。

エラーは言うThread 1:signal SIGABRT

エラーは main.m にあります

#import <UIKit/UIKit.h>

#import "CGAppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([CGAppDelegate class]));
    }
}

それはエラーがここにあると言います

patientController *patient = [[patientController alloc] init];

これが私のpatientController.hファイルです

#import <UIKit/UIKit.h>

@interface patientController : UIViewController {
    NSIndexPath *index;

    IBOutlet UIImageView * pictureView;
    IBOutlet UILabel * descriptionView1;
    IBOutlet UILabel * descriptionView2;
    IBOutlet UILabel * descriptionView3;
}

- (id)initwithIndexPath:(NSIndexPath *)indexPath;

@end

そして私の.mファイル

#import "patientController.h"

#import "CGAppDelegate.h"

#import "sls.h"

@interface patientController ()

@end

@implementation patientController

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

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    CGAppDelegate *delegate =
    (CGAppDelegate *)[[UIApplication sharedApplication] delegate];
    sls *thissls = [delegate.patients objectAtIndex:index.row];
    self.title = thissls.patientName;
    self->descriptionView1.text = thissls.patientName;
    self->descriptionView2.text = thissls.surnameName;
    self->descriptionView3.text = thissls.dateOfBirth;
    self->pictureView.image = thissls.patientImage;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (id)initwithIndexPath:(NSIndexPath *)indexPath {
    if ( (self == [super init]) ) {
        index = indexPath;
    }
    return self;
}
@end

誰でも助けてください

4

4 に答える 4

0

例外が発生した場所を確認するには、Xcode のブレークポイント ナビゲーション タブで左下隅のプラス ボタンをクリックし、Exceptions Breakpoint. 次に、Xcode からアプリを実行します。あなたの場合のように、次回例外が発生すると、アプリの実行が停止し、Xcode は例外が発生したコード行を指します。

とにかく、navigationControllers がどのように機能するかを理解してもらうために:

UINavigationController は、他の UIViewController インスタンスのスタックを制御する UIViewController です。この他のView Controllerは、「ナビゲーションスタック」にあると言われています。ナビゲーション スタックの一番上の項目はビュー コントローラーで、特定の時間に画面にビューが表示されます。ビュー コントローラーをナビゲーション スタック上またはナビゲーション スタックからプッシュ (表示) またはポップ (非表示) できます。

UINavigationController は「rootViewController」で初期化されます。これは、スタック上の最初のビュー コントローラーになるため、navigationController を画面に追加したときに最初に表示されます (たとえば、appDelegate ウィンドウの rootViewController として設定することにより)。ナビゲーション スタック上の各 UIViewController は、プロパティ 'navigationController' を通じてそのナビゲーション コントローラーを参照します。

任意の時点で、UINavigationController メソッドpushViewController:animated:を使用しpopViewControllerAnimated:たり、navigationStack から viewController を追加または削除したりpopToViewController:animated:できます。popToRootViewControllerAnimated:もちろん、このメソッドの結果を確認するには、navigationController を画面に表示する必要があります。

詳細については、UINavigationController クラス リファレンスを参照してください。

于 2013-06-15T08:45:49.120 に答える
0

使用する

 [self.navController pushViewController:patient animated: YES];

すべてのViewControllerには、それ自体にナビゲーションコントローラの参照があり、それを呼び出すためにアプリケーションデリゲートを呼び出す必要はありません[ナビゲーションコントローラを初期化する必要があり、すべてのViewControllerは、これが機能するまでナビゲーションスタックにプッシュする必要があります]

これを使用して、appdelegate でナビゲーション コントローラーをセットアップします。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

//Note : this is an example set like this with your viewcontroller instance
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
    } else {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
    }
    self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    [self.window makeKeyAndVisible];
    return YES;
}
于 2013-06-15T08:28:58.127 に答える
0

現在、navigationController (新しい ViewController をプッシュするために必要) にいる場合は、これらの行を呼び出すだけで新しいコントローラーをプッシュできます。

-(void)tableView:(UITableView *)tv didSelectRowAtIndexPath:
(NSIndexPath *)indexPath {
   patientController *patient = [[patientController alloc] init];
   [self.navigationController pushViewController:patient animated: YES];
}
于 2013-06-15T08:32:25.467 に答える