TableView в TabView, исключение поймано, неправильный Appdelegate? - PullRequest
0 голосов
/ 23 апреля 2011

Я пытаюсь реализовать свое табличное представление, которое я сделал ранее, в новом приложении на основе вкладок, которое я только что создал, и все собирать и компилировать, но когда я выбираю вкладку для моего импортированного табличного представления, происходит сбой сследующая ошибка:

[Session started at 2011-04-23 00:55:14 +0200.]
2011-04-23 00:55:16.361 EXOtab[1123:207] -[EXOtabAppDelegate larms]: unrecognized selector sent to instance 0x5f2b4e0    

В моем файле заголовка определен объектный ларм для анализа данных для моего просмотра таблицы.

#import <UIKit/UIKit.h>

@interface XMLAppDelegate : NSObject <UIApplicationDelegate> {

UIWindow *window;
UINavigationController *navigationController;

NSMutableArray *larms;
}

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

@property (nonatomic, retain) NSMutableArray *larms;

 - (void)loadXML;

@end

Я не знаю, пропускаю ли я какой-либо из моихфайлы заголовков из модели данных моего tableview или если у меня плохие ссылки при вызове.Конечно, он работает нормально, если я использую его снаружи как приложение для просмотра таблиц, но не в своем приложении панели вкладок.

мои ViewControllers:

#import "EXOtabAppDelegate.h"
#import "EXOtabViewController.h"
#import "users.h"
#import "info.h"
#import "RootViewController.h"  // My Tableview

 @implementation EXOtabAppDelegate

 @synthesize window;
 @synthesize viewController;


#pragma mark -
#pragma mark Application lifecycle

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


UITabBarController *tabBarController = [[UITabBarController alloc] init];

UIViewController *vc1 = [[info alloc] init];
UIViewController *vc2 = [[users alloc] init];
UIViewController *vc3 = [[RootViewController alloc] init];

NSArray *viewControllers = [NSArray arrayWithObjects:vc1, vc2, vc3, nil];

[vc1 release];
[vc2 release];
[vc3 release];

[tabBarController setViewControllers:viewControllers];

[window setRootViewController:tabBarController];
[tabBarController release];

[window makeKeyAndVisible];

return YES;
}

есть идеи?И дайте мне знать, если вам нужно больше увидеть код

// reg: mandelmassa

У меня есть еще код, чтобы показать:

  //RootViewController.m
- (void)viewDidLoad {
[super viewDidLoad];


if (_refreshHeaderView == nil) {

    EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)];
    view.delegate = self;
    [self.tableView addSubview:view];
    _refreshHeaderView = view;
    [view release];

}

//  update the last update date
[_refreshHeaderView refreshLastUpdatedDate];

    //this is where the app crashes!
appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];
self.title = @"Larm";

}


   //RootViewController.h
   #import <UIKit/UIKit.h>
   #import "EGORefreshTableHeaderView.h"

  @class XMLAppDelegate, LarmDetail;

  @interface RootViewController : UITableViewController <EGORefreshTableHeaderDelegate,     UITableViewDelegate, UITableViewDataSource>{

XMLAppDelegate *appDelegate;
LarmDetail *ldvController;

EGORefreshTableHeaderView *_refreshHeaderView;

BOOL _reloading;


 }


- (void)reloadTableViewDataSource;
- (void)doneLoadingTableViewData;

@end

//XMLAppDelegate.h
#import <UIKit/UIKit.h>

@interface XMLAppDelegate : NSObject <UIApplicationDelegate> {

UIWindow *window;
UINavigationController *navigationController;

NSMutableArray *larms;
 }

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

- (void)loadXML;

@end


//XMLAppDelegate.m
#import "XMLAppDelegate.h"
#import "RootViewController.h"
#import "XMLParser.h"

 @implementation XMLAppDelegate

 @synthesize window;
 @synthesize navigationController, larms;


  -(void)applicationDidFinishLaunching:(UIApplication *)application {

[self loadXML]; //egen function för att ladda data

// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
 }

 - (void)loadXML{

NSURL *url = [[NSURL alloc] initWithString:@"http://192.168.1.90/EXOxml.php?nAlarms=2"];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:    url];

//Initialize the delegate.
XMLParser *parser = [[XMLParser alloc] initXMLParser];

//Set delegate
[xmlParser setDelegate:parser];

//Start parsing the XML file.
BOOL success = [xmlParser parse];

if(success)
    NSLog(@"Data loaded");
else
    NSLog(@"Data fail!!!");


 }


 - (void)applicationWillTerminate:(UIApplication *)application {
// Save data if appropriate
 }


 - (void)dealloc {
[larms release];
[navigationController release];
[window release];
[super dealloc];
 }

@end

Может кто-нибудь1 понять, почемумое приложение вызывает ошибку?

reg Mandel

(XMLAppdelegate)
#import <UIKit/UIKit.h>

@interface XMLAppDelegate : NSObject <UIApplicationDelegate> {

UIWindow *window;
UINavigationController *navigationController;

NSMutableArray *larms;
}

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

 - (void)loadXML;

 @end

(XMLAppDelegate.m)

   #import "XMLAppDelegate.h"
   #import "RootViewController.h"
   #import "XMLParser.h"

   @implementation XMLAppDelegate

   @synthesize window;
   @synthesize navigationController, larms;


  -(void)applicationDidFinishLaunching:(UIApplication *)application {

[self loadXML]; own function to load data

// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
  }

    - (void)loadXML{

NSURL *url = [[NSURL alloc] initWithString:@"http://xxx.xxx.xxx.xxx/somefile.php?nAlarms=2"];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:    url];

//Initialize the delegate.
XMLParser *parser = [[XMLParser alloc] initXMLParser];

//Set delegate
[xmlParser setDelegate:parser];

//Start parsing the XML file.
BOOL success = [xmlParser parse];

if(success)
    NSLog(@"No Errors");
else
    NSLog(@"Error Error Error!!!");


  }


 - (void)applicationWillTerminate:(UIApplication *)application {
// Save data if appropriate
}


- (void)dealloc {
[larms release];
[navigationController release];
[window release];
[super dealloc];
 }

 @end

1 Ответ

0 голосов
/ 23 апреля 2011

Ваши классы XMLAppDelegate и EXOtabAppDelegate оба реализуют протокол UIApplicationDelegate. Вы не должны иметь более одного UIApplicationDelegate для приложения.

Ваш делегат приложения установлен в вашем основном файле пера (обычно "MainWindow.xib"). Вы должны были подключить выход «делегата» владельца файла (который является объектом UIApplication) к объекту UIApplicationDelegate в файле .xib, и класс UIApplicationDelegate установлен в * 1011 вашего приложения. * подкласс, XMLAppDelegate или EXOtabAppDelegate.

Поскольку у вашего XMLAppDelegate есть свойство larms, а у вашего EXOtabAppDelegate его нет, я полагаю, ваш делегат приложения на самом деле имеет значение EXOtabAppDelegate в вашем основном файле пера.

Если EXOtabAppDelegate является делегатом вашего приложения, вы не можете сделать это:

appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...