UITableView + UINavigationController =无法识别的选择器已发送到实例xxxxxxxx? [英] UITableView + UINavigationController = unrecognized selector sent to instance xxxxxxxx?

查看:42
本文介绍了UITableView + UINavigationController =无法识别的选择器已发送到实例xxxxxxxx?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个应用,该应用使用位于 MainWindow.xib 中的 UINavigationController (视图的笔尖是RootViewController.xib)和 UITableView RootViewController.xib 中的code>.我有以下代码:

I'm creating an app which uses a UINavigationController (which's view's nib is RootViewController.xib) located in MainWindow.xib, and a UITableView in RootViewController.xib. I have this code:

很抱歉,您需要能够看到此图像http://img42.imageshack.us/img42/9338/schermafbeelding2010021.png

@interface TDAppDelegate : NSObject <UIApplicationDelegate> {
    // VARIABLES
    NSManagedObjectModel *managedObjectModel;
    NSManagedObjectContext *managedObjectContext;       
    NSPersistentStoreCoordinator *persistentStoreCoordinator;

    // IBOUTLETS
    UIWindow *window;
    UINavigationController *navigationController;
}

// PROPERTIES
@property(nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property(nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property(nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;

@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet UINavigationController *navigationController;


// IBACTIONS


// METHODS
- (NSString *)applicationDocumentsDirectory;

@end

TDAppDelegate.m

#import "TDAppDelegate.h"


@implementation TDAppDelegate

@synthesize window;
@synthesize navigationController;

// MEMORY
- (void)dealloc {
    [managedObjectContext release];
    [managedObjectModel release];
    [persistentStoreCoordinator release];

    [navigationController release];
    [window release];
    [super dealloc];
}

// APPLICATION

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    [window makeKeyAndVisible];
    [window addSubview:[navigationController view]]; // IT GOES WRONG WHEN I DO THIS
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // Save changes before quitting =D
    NSError *error = nil;
    if(managedObjectContext != nil) {
        if([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        } 
    }
}

// CORE DATA
- (NSManagedObjectContext *) managedObjectContext {
    // Returns the managed object context for the application. If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.
    if(managedObjectContext != nil) {
        return managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if(coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }
    return managedObjectContext;
}

- (NSManagedObjectModel *)managedObjectModel {
    // Returns the managed object model for the application. If the model doesn't already exist, it is created by merging all of the models found in the application bundle.
    if(managedObjectModel != nil) {
        return managedObjectModel;
    }
    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
    return managedObjectModel;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    // Returns the persistent store coordinator for the application. If the coordinator doesn't already exist, it is created and the application's store added to it.
    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }

    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"To_Do.sqlite"]];

    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        UIAlertView *quitAlert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"error", @"error")  message:[NSString stringWithFormat:NSLocalizedString(@"persistentstorecoordinator error", @""), [error userInfo]] delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
        [quitAlert show];
        [quitAlert release];
    }    

    return persistentStoreCoordinator;
}


- (NSString *)applicationDocumentsDirectory {
    // Returns the path to the application's Documents directory.
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

@end

TDRootViewController.h

#import <UIKit/UIKit.h>


@interface TDRootViewController : UITableViewController <UITableViewDataSource> {
    NSMutableArray *todoArray;
    NSManagedObjectContext *managedObjectContext;

    UIBarButtonItem *addButton;
}

@property(nonatomic, retain) NSMutableArray *todoArray;
@property(nonatomic, retain) NSManagedObjectContext *managedObjectContext;

@property(nonatomic, retain) UIBarButtonItem *addButton;

@end

TDRootViewController.m

#import "TDRootViewController.h"
#import "TodoItem.h"


@implementation TDRootViewController

// MEMORY
- (void)dealloc {
    [super dealloc];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
}

// VIEW
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        return YES;
    }
    return NO;
}

// TABLE VIEW

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


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}


// Customize the appearance of table view cells.
- (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] autorelease];
    }

    // Set up the cell...

    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic may go here. Create and push another view controller.
    // AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherView" bundle:nil];
    // [self.navigationController pushViewController:anotherViewController];
    // [anotherViewController release];
}


/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
 */


/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/


/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/


/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

// METHODS
- (void)addItem {
    TodoItem *todoItem = (TodoItem *)[NSEntityDescription insertNewObjectForEntityForName:@"TodoItem" inManagedObjectContext:managedObjectContext];
}

@end

phe = D

好的,我的应用程序可以正确编译,但是当它启动时,圣洁的控制台会说:

Okay, my app compiles correctly, but when it starts, the holy Console says this:

[Session started at 2010-02-14 14:40:12 +0100.]
2010-02-14 14:40:15.245 To Do[1478:207] *** -[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x3a155b0
2010-02-14 14:40:15.246 To Do[1478:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x3a155b0'
2010-02-14 14:40:15.246 To Do[1478:207] Stack: (
    30893147,
    2500113673,
    31275067,
    30844534,
    30697154,
    4364410,
    4371786,
    4370783,
    3087322,
    3027833,
    3069268,
    3057823,
    57406128,
    57405551,
    57403590,
    57402682,
    2731769,
    2755464,
    2737875,
    2764981,
    38989521,
    30677888,
    30673992,
    2731625,
    2768899,
    10592,
    10446
)

我认为这与 numberOfRowsInSection 有关,但我不确定.谁能帮我吗?谢谢

I think it has something to do with numberOfRowsInSection but I'm not sure. Can anyone help me out? Thanks

推荐答案

我相信您已经将有问题的UITableView的数据源连接(在Interface Builder中)连接到了错误的源.
它应该连接到文件的所有者.

I believe that you've connected the datasource's connection of the problematic UITableView (in Interface Builder) to wrong source.
It should be connected to file's owner.

或者文件所有者的类别未设置为正确的视图控制器.

Or the class of file's owner is not set to the correct view controller.

发布您的IB的一些屏幕截图.
发布以下屏幕:
-选择表格视图,然后按Cmd + 2
-选择文件的所有者,然后按Cmd + 4

Post some screenshots from your IB.
Post the next screens:
- select the table view and press Cmd+2
- select the file's owner and press Cmd+4

这篇关于UITableView + UINavigationController =无法识别的选择器已发送到实例xxxxxxxx?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆