几秒钟后应用程序崩溃

问题描述:

当我启动我的应用程序,尝试做某件事情时,它会在几秒钟后崩溃。我有警告警告:“downloadTextViewCOntroller的不正确的实现。我也有”方法definiton for -timerFinished未找到和“方法definiton for -timerFinished未找到”这是我的.m帮助我。在.H元素也是t底部几秒钟后应用程序崩溃

// 
    // 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 

你还没有实现你的头部声明-timerFinished方法。除了在头文件中声明它之外,即使它是空的,也需要提供它的实现。

您的应用程序崩溃,因为计时器在10秒后触发,并且无法找到正在尝试呼叫的方法。

+0

非常感谢你的帮助,现在的伟大工程! – declanjs 2010-03-23 05:24:41

其中之一,你没有任何timerFinished,这就是为什么你得到这个警告,但现在你可以忽略它,直到你在你的代码中实现它。并且你启动了一个计时器,并让它做了一些它不能做的事情,因为你没有编写代码。

为了解决这个问题,只是把按照您的m

-(void)timerFinished 
{ 
}