Question

J'ai un fichier texte avec 5 chaînes.Je dois utiliser NsurlConnection pour obtenir le contenu de ce fichier.Mais Nslog me montre que "Dump" est vide.Comment puis-je transformer les données de Nsmutabledata vers Nsarray.Les matrices sont parce que je dois montrer ces 5 articles dans une vue de table.

NSURLRequest *theRequest=[NSURLRequest
                         requestWithURL:[NSURL URLWithString:@"http://dl.dropbox.com/u/25105800/names.txt"]
                         cachePolicy:NSURLRequestUseProtocolCachePolicy
                         timeoutInterval:60.0];

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
    receivedData = [NSMutableData data];
    NSString *dump = [[NSString alloc] initWithData:receivedData
                         encoding:NSUTF8StringEncoding];
    NSLog(@"data: %@", dump);
    NSArray *outputArray=[dump componentsSeparatedByString:@"\n"];
    self.namesArray = outputArray;

Merci d'avance.BTW URL fonctionne, vous pouvez voir le fichier.

Était-ce utile?

La solution

Si vous ne voulez pas utiliser de délégué, vous pouvez utiliser un appel synchrone avec NsurlConnection, comme celui-ci:

NSURLRequest *theRequest=[NSURLRequest
                     requestWithURL:[NSURL URLWithString:@"http://dl.dropbox.com/u/25105800/names.txt"]
                     cachePolicy:NSURLRequestUseProtocolCachePolicy
                     timeoutInterval:60.0];

NSError *error = nil;
NSHTTPURLResponse *response = nil;
NSData *receivedData = [NSURLConnection sendSynchronousRequest:theRequest response:&response error:&error];

if (error == nil) {
    NSString *dump = [[NSString alloc] initWithData:receivedData
                     encoding:NSUTF8StringEncoding];
    NSLog(@"data: %@", dump);
    NSArray *outputArray=[dump componentsSeparatedByString:@"\n"];
    self.namesArray = outputArray;
}

Attention à ce que cela ne fonctionnera pas de manière asynchrone.Si vous ne voulez pas qu'il soit exécuté sur le fil principal et bloquez votre fil principal / interface utilisateur, envisagez d'utiliser un thread séparé pour exécuter ce code ou utilisez GCD.

Autres conseils

Voici comment vous implémentez cette solution avec un délégué:

dans votre fichier .h:

@interface MyClass : NSObject <NSURLConnectionDelegate, NSURLConnectionDataDelegate>

@property (nonatomic, retain) NSMutableData *receivedData;
@property (nonatomic, retain) NSArray *namesArray;

@end

en vous. Mode .m:

@implementation MyClass

@synthesize receivedData = _receivedData;
@synthesize namesArray = _namesArray;

- (id)init {
    self = [super init];
    if (self) {
        self.receivedData = [NSMutableData data];
        NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://dl.dropbox.com/u/25105800/names.txt"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
        NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
        [connection start];

    }
    return self;
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    NSLog(@"Received response! %@", response);
}

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

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSString *dump = [[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding];
    NSLog(@"data: %@", dump);
    self.namesArray = [dump componentsSeparatedByString:@"\n"];
}

@end

Vous devez utiliser le délégué, puis enregistrer les données reçues dans ReveedData (ce qui est bien sûr vide maintenant. Vous venez de l'initaliser.) Et ensuite, vous transformez les données en une chaîne, comme vous l'avez fait dans votre exemple..Jetez un coup d'œil à NSURLConnectionDelegate

Vous devez mettre en œuvre les méthodes de délégation pour NsurlConnection à notifier des données entrantes.Vous utilisez les méthodes asynchrones.

Notez également que [NSMutableData data] crée simplement un objet de données vide. Vous ne pouvez donc pas vous attendre à contenir de données.

Je vous suggère de lire https://developer.apple.com/library/ios/#documentation/cocoa/conceptuelle/urlloadingsystem/tasks/ustnsurlconnection.html#/apple_ref/doc/uid/20001836-bajeaeee (complètement!)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top