Skip to content

Commit

Permalink
Added version of async file reading helper code that writes to an NSD…
Browse files Browse the repository at this point in the history
…ata instead of an NSString.
  • Loading branch information
uliwitness committed Jul 10, 2010
1 parent c882134 commit 83045d2
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 4 deletions.
2 changes: 2 additions & 0 deletions NSFileHandle+AppendToStringAndNotify.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,7 @@
// endSelector must be of the form: -(void) dataReadFrom: (NSFileHandle*)sender finished: (BOOL)finished;
-(void) readDataToEndOfFileIntoString: (NSMutableString*)str endSelector: (SEL)sel
delegate: (id)del;
-(void) readDataToEndOfFileIntoData: (NSMutableData*)theData endSelector: (SEL)sel
delegate: (id)del;

@end
37 changes: 33 additions & 4 deletions NSFileHandle+AppendToStringAndNotify.m
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,29 @@ -(void) readDataToEndOfFileIntoString: (NSMutableString*)str endSelector: (SEL)s
}


-(void) readDataToEndOfFileIntoData: (NSMutableData*)theData endSelector: (SEL)sel
delegate: (id)del
{
if( !gUKAppendAndNotifyData )
gUKAppendAndNotifyData = [[NSMutableArray alloc] init];

[gUKAppendAndNotifyData addObject: [NSDictionary dictionaryWithObjectsAndKeys:
[NSValue valueWithNonretainedObject: self], @"object",
[NSValue valueWithNonretainedObject: del], @"delegate",
[NSValue valueWithBytes: &sel objCType: @encode(SEL)], @"selector",
theData, @"outputdata",
nil] ];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(notifyFileHandleReadCompletionForAppendAndNotify:)
name:NSFileHandleReadCompletionNotification object: self];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(notifyFileHandleReadCompletionForAppendAndNotify:)
name:NSFileHandleReadToEndOfFileCompletionNotification object: self];
[self readInBackgroundAndNotify];
}


@end


Expand All @@ -84,8 +107,8 @@ -(NSDictionary*) infoDictionaryForAppendAndNotify
-(void) notifyFileHandleReadCompletionForAppendAndNotify: (NSNotification*) notification
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSData* data;
NSDictionary* info = [self infoDictionaryForAppendAndNotify];
NSData* data = nil;
NSDictionary* info = [self infoDictionaryForAppendAndNotify];

// Set up callback:
SEL sel = nil;
Expand All @@ -104,8 +127,14 @@ -(void) notifyFileHandleReadCompletionForAppendAndNotify: (NSNotification*) noti
if( data && [data length] ) // Still data left:
{
// Append data:
NSString* dataStr = [[[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding] autorelease];
[[info objectForKey: @"outputstring"] appendString: dataStr];
NSMutableString* outStr = [info objectForKey: @"outputstring"];
if( outStr )
{
NSString* dataStr = [[[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding] autorelease];
[outStr appendString: dataStr];
}
else
[[info objectForKey: @"outputdata"] appendData: data];

// Actually send notification:
[inv setArgument: &finished atIndex:3];
Expand Down

0 comments on commit 83045d2

Please sign in to comment.