applicationWillEnterForeground: перезагрузить данные из ViewController - PullRequest
4 голосов
/ 07 февраля 2011

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

Вот мой код:

DataAppDelegate.h

#import <UIKit/UIKit.h>
#import "DataViewController.h"


@class DataViewController;

@interface DataAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    DataViewController *viewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet DataViewController *viewController;


@end

AppDelegate.m

#import "DataAppDelegate.h"
#import "DataViewController.h"


@implementation DataAppDelegate

@synthesize window;
@synthesize viewController;


#pragma mark -
#pragma mark Application lifecycle

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

    // Override point for customization after application launch.

    // Add the view controller's view to the window and display.
    [self.window addSubview:viewController.view];
    [self.window makeKeyAndVisible];

    return YES;
}


- (void)applicationWillResignActive:(UIApplication *)application {
    NSLog(@"app will resign active");
}


- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSLog(@"app did enter background");
    [DataViewController refresh];
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"app will enter foreground");
    [DataViewController refresh];
}

DataViewController.h

    @interface DataViewController : UIViewController<UIWebViewDelegate, ADBannerViewDelegate> {
    IBOutlet UIWebView *webView;
    IBOutlet UITextField *addressBar;
    IBOutlet UIActivityIndicatorView *activityIndicator;
    IBOutlet UILabel *myField2;
    IBOutlet UILabel *myField3;
    IBOutlet UILabel *myField4;
    IBOutlet UILabel *myField5;
    IBOutlet UILabel *myField6;
    ADBannerView *adView;
    BOOL bannerIsVisible;
}



@property(nonatomic,retain) UIWebView *webView;
@property(nonatomic,retain) UITextField *addressBar;
@property(nonatomic,retain) UIActivityIndicatorView *activityIndicator;
@property(nonatomic,assign) BOOL bannerIsVisible;


-(IBAction) goBack:(id)sender;
-(IBAction) goForward:(id)sender;
-(IBAction) refresh:(id)sender;
-(IBAction) goImpressum:(id)sender;

@end

DataViewController.m

- (void) viewDidLoad  {
    [self loadData];

}
- (void)loadData {
// contains information the ViewController makes use of
}

-(IBAction)refresh:(id) sender {
    [self loadData];
    }

С этим кодом я получаю два предупреждения:

DataViewController может не отвечать на «+ refresh»

но это работает.

Если я обрежу строку в методе applicationDidEnterBackground: он больше не работает, приложение вылетает Зачем? Как мне заполнить applicationDidEnterBackground: метод? Нужно ли мне забронировать место для моего приложения? как мне это сделать?

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

Заранее спасибо за помощь:)

1 Ответ

4 голосов
/ 07 февраля 2011

Изменить

    - (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"app will enter foreground");
    [DataViewController refresh];
}

на

- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"app will enter foreground");
    [viewController refresh:NULL];
}
...