应用程序在几秒钟后崩溃

时间:2010-03-22 20:19:43

标签: objective-c

当我启动我的应用程序时,在尝试做某事时,它会在几秒后崩溃。我有警告的警告:“downloadTextViewCntroller的错误实现。我也有”方法定义 - 找不到-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 个答案:

答案 0 :(得分:2)

您尚未实现标头中声明的-timerFinished方法。除了在头文件中声明它之外,你需要提供它的实现,即使它是空的。

你的应用程序崩溃了,因为计时器在10秒后触发,但找不到它试图调用的方法。

答案 1 :(得分:0)

对于一个,你没有任何关于timerFinished的东西,这就是你得到那个警告的原因,但是现在你可以忽略它,直到你在代码中实现它。你启动一个计时器并让它做一些它不能做的事情,因为你没有适当的代码。

要解决此问题,只需将以下内容放入.m

即可
-(void)timerFinished
{
}