I am trying to port the following method to RubyMotion
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSInteger dataLength = [data length]; const uint8_t * dataBytes = [data bytes]; NSInteger bytesWritten; NSInteger bytesWrittenSoFar; bytesWrittenSoFar = 0; do { bytesWritten = [self.downloadStream write:&dataBytes[bytesWrittenSoFar] maxLength:dataLength - bytesWrittenSoFar]; assert(bytesWritten != 0); if (bytesWritten == -1) { [self cleanupConnectionSuccessful:NO]; break; } else { bytesWrittenSoFar += bytesWritten; } } while (bytesWrittenSoFar != dataLength); self.progressContentLength += dataLength; }
(this is from robertmryan / download-manager )
This is what I currently have that crashes when calling downloadStream using connection:didReceiveData:': can't convert Fixnum into String (TypeError)
def connection(connection, didReceiveData:data) dataLength = data.length dataBytes = data.bytes bytesWritten = 0 bytesWrittenSoFar = 0 begin maxLength = dataLength - bytesWrittenSoFar buffer = dataBytes[bytesWrittenSoFar] bytesWritten = self.downloadStream.write buffer, maxLength: maxLength
I understand that my conversion ignores pointers, probably naively and incorrectly. I checked the RubyMotion docs, but they are a little rare, and my understanding of C is not strong enough to know how to apply it here. Some tips would be greatly appreciated.
source share