2010-11-05 4 views
1

Actuellement, j'essaie d'utiliser NSMutableURLRequest, en définissant le HTTPBody sur un NSInputStream écrit personnalisé qui fournit ces segments.Comment puis-je implémenter des requêtes http segmentées sur iPhone?

Ce serait bien si ce n'était pas pour le fait que NSMutableURLRequest me demande d'implémenter de plus en plus de méthodes dans ma classe NSInputStream. Tout d'abord, il m'a demandé d'implémenter - streamStatus: et c'était assez simple à implémenter, mais maintenant il demande _scheduleInCFRunLoop: forMode: ...

Fondamentalement, je génère des données à partir d'un algorithme et je voudrais l'envoyer à serveur via une requête fragmentée.

Voici le code:

@interface GERHTTPChunkInputStream : NSInputStream 
{ 
    uint8_t counter_; 
} 

- (GERHTTPChunkInputStream *)init; 
- (void)dealloc; 
- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len; 
- (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len; 
- (BOOL)hasBytesAvailable; 
- (NSStreamStatus)streamStatus; 

@end 

@implementation GERHTTPChunkInputStream 

- (GERHTTPChunkInputStream *)init { 
    [super init]; 
    return self; 
} 

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

- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len { 
    NSLog(@"Getting more bytes!!!"); 
    for (int i = 0; i < len; ++i) { 
    buffer[i] = ++counter_; 
    } 
    return len; 
} 

- (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len { 
    return NO; 
} 

- (BOOL)hasBytesAvailable { 
    return YES; 
} 

- (NSStreamStatus)streamStatus { 
    return NSStreamStatusNotOpen; 
} 

@end 
+0

_NSInputStream_ implémente deux méthodes mentionnées. Votre classe de flux est-elle vraiment une sous-classe de _NSInputStream_? Il semble que vous ayez une sous-classe de _NSStream_ au lieu de _NSInputStream_. – Codo

+0

Hérité de NSInputStream. La méthode - streamStatus: existait déjà mais lorsqu'elle a été appelée, elle a indiqué que l'implémentation de NSStream était abstraite. L'autre ne semble pas être mis en œuvre. Il semble que NSUrlRequest excepte un NSInputStream interne très spécifique. :( – rui

+0

J'ai le même besoin de créer par programme un flux d'entrée, ce qui s'avère difficile – nont

Répondre

3

Selon quelques discussions sur le net, il est difficile de sous-classe nsInputStream. Jetez un oeil à Multipart POST using NSInputStream ou NSInputStream subclass asynchronous.

Il semble que vous avez besoin en effet de mettre en œuvre ces méthodes privées étranges ...

+0

Incroyable que trois ans plus tard, nous ne pouvons toujours pas sublimer NSInputStream Je suppose que ce n'est pas une priorité pour Apple? – nont

Questions connexes