2011-10-18 2 views
0

Je reçois EXC_BAD_ACCESS pendant que NSURLREQUEST. Je donne l'URL de pdf du serveur au webview par l'intermédiaire de l'actuel bookBookPressed de AppDelegate_iPhone. s'il vous plaît quelqu'un peut-il dire quel est le problème ... Code: -Je reçois EXC_BAD_ACCESS tandis que NSURLREQUEST

@class AppDelegate_iPhone; 
@interface PdfShowViewController : UIViewController<UIWebViewDelegate> { 

    UIWebView *pdfWebview; 
    AppDelegate_iPhone *appDelegate; 
    NSMutableData *receivedData; 
    UIActivityIndicatorView *myIndicator; 
    IBOutlet UIProgressView *progress; 

    NSURLRequest* DownloadRequest; 
    NSURLConnection* DownloadConnection; 

    long long bytesReceived; 
    long long expectedBytes; 

} 


@property (nonatomic,retain) UIWebView *pdfWebview; 
@property (nonatomic,retain) UIActivityIndicatorView *myIndicator; 
@property (nonatomic,retain) IBOutlet UIProgressView *progress; 
@property (nonatomic,retain) NSMutableData *receivedData; 
@property (nonatomic, readonly, retain) NSURLRequest* DownloadRequest; 
@property (nonatomic, readonly, retain) NSURLConnection* DownloadConnection; 

-(IBAction)onTapBack; 

@end 


#import "PdfShowViewController.h" 
#import "AppDelegate_iPhone.h" 

@implementation PdfShowViewController 

@synthesize pdfWebview,myIndicator,progress,receivedData,DownloadRequest,DownloadConnection; 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [receivedData appendData:data]; 

    unsigned char byteBuffer[[receivedData length]]; 
    [receivedData getBytes:byteBuffer]; 
    NSLog(@"Data === %ld",receivedData); 

    NSInteger receivedLen = [data length]; 
    bytesReceived = (bytesReceived + receivedLen); 
    NSLog(@"received Bytes == %f",bytesReceived); 

    if(expectedBytes != NSURLResponseUnknownLength) 
    { 
     NSLog(@"Expected Bytes in if == %f",expectedBytes); 
     NSLog(@"received Bytes in if == %f",bytesReceived); 

     float value = ((float) (bytesReceived *100/expectedBytes))/100; 
     NSLog(@"Value == %f",value); 
     progress.progress=value; 
    } 

} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    //[connection release]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    expectedBytes = [response expectedContentLength]; 
    NSLog(@"%f",expectedBytes); 

} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 

    [myIndicator stopAnimating]; 
    [myIndicator removeFromSuperview]; 

    pdfWebview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 40, 320, 420)]; 
    [pdfWebview setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
    [pdfWebview setScalesPageToFit:YES]; 
    [pdfWebview setAutoresizesSubviews:YES]; 

    [pdfWebview loadRequest:DownloadRequest]; 

    [self.view addSubview:pdfWebview]; 

    //[connection release]; 


} 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    appDelegate = (AppDelegate_iPhone *)[[UIApplication sharedApplication] delegate]; 

    myIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    myIndicator.center = self.view.center; 
    myIndicator.hidesWhenStopped = NO; 
    [self.view addSubview:myIndicator]; 
    [myIndicator startAnimating]; 

    //receivedData = [[NSMutableData alloc] initWithLength:0]; 
    NSLog(@"%@",appDelegate.currentBookPressed); 
    NSString * urlString = [appDelegate.currentBookPressed stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
    NSLog(@"%@",urlString); 

    NSURL *targetURL = [NSURL URLWithString:urlString]; 
    NSLog(@"%@",targetURL); 

// Here comes Acception 

    DownloadRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:targetURL] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:120.0]; 
    DownloadConnection = [[NSURLConnection alloc] initWithRequest:DownloadRequest delegate:self]; 

    if (DownloadConnection) { 
     receivedData = [[[NSMutableData data]initWithLength:0]retain]; 
    } 

} 

// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 


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

- (void)viewDidUnload { 
    [super viewDidUnload]; 
} 
-(IBAction)onTapBack 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

- (void)dealloc { 
    [super dealloc]; 
    [pdfWebview release]; 
    [receivedData release]; 
} 


@end 
+0

Où est l'endroit où vous obtenez l'exception? – Eimantas

+0

j'ai écrit entre le code où je reçois ... je reçois tout en accédant à NSURLREQUEST ... c'est le lien pdf ... http://litofinter.es.milfoil.arvixe.com/PDF/1211025183_test. pdf – mAc

+0

Acception est: --- *** Termination app en raison de l'exception uncaught 'NSInvalidArgumentException', raison: '- [longueur NSURL]: sélecteur non reconnu envoyé à l'instance 0x4c776e0' – mAc

Répondre

2

Vous devez remplacer la ligne

DownloadRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:targetURL] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:120.0]; 

avec la ligne

DownloadRequest = [NSURLRequest requestWithURL:targetURL cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:120.0]; 

Il est parce que la méthode requestWithURL:cachePolicy:timeoutInterval: en premier le paramètre attend l'objet de la classe NSURL. Dans targerURL vous avez exactement celui-là.

En outre, dans la méthode [NSURL URLWithString:targetURL] (si vous en avez besoin), vous devez passer NSString comme premier paramètre, mais vous passez NSURL.

+0

Merci encore Nekto ... mais il me donne encore EXC_BAD_ACCESS, mais maintenant à différents posi .. :). Il arrive à la ligne [pdfWebview loadRequest: DownloadRequest]; – mAc

+0

mais j'ai encore une question c'est à dire quand je charge mon webview en mode portrait il est bien en mode paysage et portrait ... mais quand je charge mon webview en mode paysage la vue web charge en demi-écran seulement (compresse) et quand je changez l'orientation en mode portrait il agian plus compresse ... que dois-je faire? – mAc

+0

1. A la fin de 'viewDidLoad', ajoutez la ligne' [DownloadRequest retain]; '. 2. Deuxième question s'il vous plaît demander dans un autre fil (question séparée) – Nekto

1

Votre problème dans cette ligne

DownloadRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:targetURL] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:120.0]; 

Le problème dans votre cas se pose parce que paramètre pour + (id)URLWithString:(NSString *)URLString est NSString et vous passez NSURL et méthode essayant d'obtenir la longueur de la chaîne supposée en appelant -length, qui existe pour NSString mais pas pour NSURL.

+0

merci pour votre explication ... c'était bon pour moi, j'ai résolu cette partie mais maintenant je reçois une exception sur cette ligne .......... Merci encore Nekto. .. mais encore il me donne EXC_BAD_ACCESS, mais maintenant à différents posi .. :). il arrive à la ligne [pdfWebview loadRequest: DownloadRequest]; – mAc

+1

mettre breakpoint dans - (void) connectionDidFinishLoading: (NSURLConnection *) connexion et vérifier la valeur –

+0

Hmmm .. J'ai trouvé que je dois donner la demande de chargement dans fini seulement ... – mAc