Я принял ваш код, чтобы он работал.
Основные изменения: pagesTableViewController
и collectionViewController
должны быть
сохраненные свойства вашего приложения делегата.
self.window.rootViewController
теперь определено в didFinishLaunchingWithOptions:
, оба viewController-а выпущены в dealloc
.
Обратите внимание, что вам действительно следует рассмотреть возможность размещения определений классов в отдельных файлах и
возможно, начните использовать ARC для новых проектов.
PageFlipperAppDelegate.h
#import <UIKit/UIKit.h>
#import "PageView.h"
#import "SlideShowViewController.h"
#import "PagesCollectionViewController.h"
@protocol MyKindOfWindowDelegate;
@interface PageFlipperAppDelegate : NSObject <UIApplicationDelegate,MyKindOfWindowDelegate> {}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) PagesTableViewController* pagesTableViewController;
@property (nonatomic, retain) SlideShowViewController* collectionViewController;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;
@end
@interface MyKindOfWindow : UIWindow
{
NSTimer *tenthTimer;
NSInteger tenthPast;
}
@property (nonatomic, retain) id <MyKindOfWindowDelegate> touchDelegate;
-(void)startTimer;
-(void)stopTimer;
-(void)timerTick;
@end
@protocol MyKindOfWindowDelegate <NSObject>
@required
- (void) noTouchForFiveSeconds;
@end
PageFlipperAppDelegate.m
#import "PageFlipperAppDelegate.h"
@implementation PageFlipperAppDelegate
@synthesize window,pagesTableViewController,collectionViewController;
@synthesize managedObjectContext, managedObjectModel, persistentStoreCoordinator;
- (void) noTouchForFiveSeconds //!! your AppDelegate should implement this method
{
NSLog (@"No touch detected for over 5 seconds");
//do your stuff
//you can re-start timer immediately or somewhere later in the code
[(MyKindOfWindow *)self.window startTimer];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
[NSThread sleepForTimeInterval:2.75];
self.window = [[MyKindOfWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[(MyKindOfWindow *)self.window setTouchDelegate:self];
self.pagesTableViewController = [[PagesTableViewController alloc] initWithManagedObjectContext:[self managedObjectContext]];
self.collectionViewController = [[PagesCollectionViewController alloc] initWithManagedObjectContext:[self managedObjectContext]];
self.window.rootViewController = self.pagesTableViewController;
[self.pagesTableViewController pushViewController:pagesTableViewController animated:NO];
[self.pagesTableViewController setToolbarHidden:NO animated:NO];
[[self window] makeKeyAndVisible];
return YES;
}
- (void)dealloc
{
[pagesTableViewController release];
[collectionViewController release];
[window release];
[managedObjectContext release];
[managedObjectModel release];
[persistentStoreCoordinator release];
[super dealloc];
}
Я сделал изменения в текстовом редакторе, поэтому возможны некоторые опечатки. Надеюсь, что нет.
EDIT:
Если вы хотите, чтобы определенный viewController запускал / останавливал таймер при его появлении / исчезновении, вы должны удалить все точности startTimer в appDelegate и поместить следующие строки в этот файл viewControllers .m:
#import "PageFlipperAppDelegate.h"
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear: animated];
PageFlipperAppDelegate *appDelegate = (PageFlipperAppDelegate *)[[UIApplication sharedApplication] delegate];
[(MyKindOfWindow *)appDelegate.window startTimer];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear: animated];
PageFlipperAppDelegate *appDelegate = (PageFlipperAppDelegate *)[[UIApplication sharedApplication] delegate];
[(MyKindOfWindow *)appDelegate.window stopTimer];
}