Приложение вылетает через несколько секунд - PullRequest
0 голосов
/ 22 марта 2010

когда я запускаю свое приложение, при попытке что-то сделать через пару секунд оно вылетает. У меня есть предупреждения: неверная реализация «downloadTextViewCOntroller. У меня также есть» определение метода для -timerFinished не найдено и «определение метода для -timerFinished не найдено» это моя .m прошу помочь мне. .h также является нижней

    //
    //  downloadTextViewController.m
   //  downloadText
//
//  Created by Declan Scott on 18/03/10.
//  Copyright __MyCompanyName__ 2010. All rights reserved.
//

    #import "downloadTextViewController.h"


@implementation downloadTextViewController

@synthesize start;

-(IBAction)tapit {
    start.hidden = YES;
}


-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    if (fabsf(acceleration.x) > 2.0 || fabsf(acceleration.y) >2.0 || fabsf(acceleration.z) > 2.0) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"This app was developed by Declan Scott and demonstrates NSURLConnection and NSMutableData" 
                                                       delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
}

- (NSString *) saveFilePath
{
    NSArray *pathArray =
    NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    return [[pathArray objectAtIndex:0] stringByAppendingPathComponent:@"savedddata.plist"];

}

- (void)applicationWillTerminate:(UIApplication *)application {
    NSArray *values = [[NSArray alloc] initWithObjects:textView.text,nil];
    [values writeToFile:[self saveFilePath] atomically:YES];
    [values release];

}

- (void)viewDidLoad {
    UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
    accelerometer.delegate = self;
    accelerometer.updateInterval = 1.0f/60.0f;
    NSString *myPath = [self saveFilePath];
    NSLog(myPath);
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:myPath];

    if (fileExists)
    {

        NSArray *values = [[NSArray alloc] initWithContentsOfFile:myPath];
        textView.text = [values objectAtIndex:0];
        [values release];
    }

    // notification
    UIApplication *myApp = [UIApplication sharedApplication];

    // add yourself to the dispatch table 
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(applicationWillTerminate:) 
                                                 name:UIApplicationWillTerminateNotification 
                                               object:myApp];

    [super viewDidLoad];
}


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (IBAction)fetchData {

    loadingAlert = [[UIAlertView alloc] initWithTitle:@"Loading…\n\n\n\n" message:nil
                                             delegate:self cancelButtonTitle:@"Cancel Timer" otherButtonTitles:nil];
    [loadingAlert show];

    UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    activityView.frame = CGRectMake(139.0f-18.0f, 60.0f, 37.0f, 37.0f);
    [loadingAlert addSubview:activityView];
    [activityView startAnimating];

    timer = [NSTimer scheduledTimerWithTimeInterval:10.0f target:self selector:@selector(timerFinished) userInfo:nil repeats:NO];   


    NSURLRequest *downloadRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://simpsonatyapps.com/exampletext.txt"]
                                                     cachePolicy:NSURLRequestReloadIgnoringCacheData
                                                 timeoutInterval:1.0];


    NSURLConnection *downloadConnection = [[NSURLConnection alloc] initWithRequest:downloadRequest delegate:self];

    if (downloadConnection)
        downloadedData = [[NSMutableData data] retain];

    else {

        // Error
            }

}

- (void)connection:(NSURLConnection *)downloadConnection didReceiveData:(NSData *)data {

    [downloadedData appendData:data];

    NSString *file = [[NSString alloc] initWithData:downloadedData encoding:NSUTF8StringEncoding];

    textView.text = file;

    // get rid of alert     
        [loadingAlert dismissWithClickedButtonIndex:-1 animated:YES];
        [loadingAlert release];

    /// add badge
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];

}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


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

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse {
    return nil;
}


@end

//
//  downloadTextViewController.h
//  downloadText
//
//  Created by Declan Scott on 18/03/10.
//  Copyright __MyCompanyName__ 2010. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface downloadTextViewController : UIViewController {

    IBOutlet UITextView *textView;
    NSMutableData *downloadedData;
    UIAlertView *loadingAlert;
    NSTimer *timer;
    IBOutlet UIButton *start;

}
- (IBAction)fetchData;
- (IBAction)tapIt;
- (void)timerFinished;
@property (nonatomic, retain) UIButton *start;

@end

Ответы [ 2 ]

2 голосов
/ 22 марта 2010

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

Ваше приложение падает, потому что таймер срабатывает через 10 секунд, и он не может найти метод, который пытается вызвать.

0 голосов
/ 22 марта 2010

для одного у вас нет ничего для timerFinished, поэтому вы получаете это предупреждение, но сейчас вы можете игнорировать его, пока не внедрите это в свой код. И вы запускаете таймер и заставляете его делать то, что он не может, потому что у вас нет кода на месте.

Чтобы это исправить, просто добавьте в свой .m

следующее
-(void)timerFinished
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...