Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将图像从NSOutputStream保存到库的正确方法是什么_Ios_Objective C - Fatal编程技术网

Ios 将图像从NSOutputStream保存到库的正确方法是什么

Ios 将图像从NSOutputStream保存到库的正确方法是什么,ios,objective-c,Ios,Objective C,如何写入UIImage并将数据发送到接收服务器。我尝试过,但NSOutputStream只能在流中写入最大136768字节,我只保存了一小部分图像。非常感谢你的帮助。这是我的密码: 来自UIImage picker -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *image = info[

如何写入UIImage并将数据发送到接收服务器。我尝试过,但NSOutputStream只能在流中写入最大136768字节,我只保存了一小部分图像。非常感谢你的帮助。这是我的密码:

来自UIImage picker

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = info[UIImagePickerControllerOriginalImage];
    NSData *imgData = UIImageJPEGRepresentation(image,1.0f);
    NSLog(@"%d",imgData.length);
    NSMutableData *completeData = [[NSMutableData alloc]init];
    [completeData appendData:imgData];

    NSInteger bytesWritten = 0;
    while ( completeData.length > bytesWritten )
    {


        //sending NSData over to server
        NSInteger writeResult = [outputStream write:[completeData bytes]+bytesWritten maxLength:[completeData length]-bytesWritten];
        if ( writeResult == -1 )
            NSLog(@"error code here");

        else
            bytesWritten += writeResult;

        if (bytesWritten == writeResult) {
                        [self dismissViewControllerAnimated:YES completion:nil];
        }
    }

}
流代理

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
// An NSStream delegate callback that's called when events happen on our 
// network stream.
{
#pragma unused(aStream)
    assert(aStream == self.networkStream);

    switch (eventCode) {
        case NSStreamEventOpenCompleted: {
            [self _updateStatus:@"Opened connection"];
        } break;
        case NSStreamEventHasBytesAvailable: {


            if (aStream == self.networkStream) {

                uint8_t buffer[5000];
                int len;

                while ([self.networkStream hasBytesAvailable]) {

                    len = [self.networkStream read:buffer maxLength:sizeof(buffer)];
                    NSLog(@"len=%d", len);

                    if (len > 0) {

                        NSData *pictureData = [NSData dataWithBytes:buffer length:len];

                        [sharedManager.pictureMutableData appendData:pictureData];

                        NSLog(@"%d",sharedManager.pictureMutableData.length);



                    }

                }
            }
        case NSStreamEventHasSpaceAvailable: {

            [self _didReceiveDataImage:sharedManager.pictureMutableData];

            NSLog(@"%d",sharedManager.pictureMutableData.length);
                   } break;
        case NSStreamEventErrorOccurred: {
            [self _stopReceiveWithStatus:@"Stream open error"];
        } break;
        case NSStreamEventEndEncountered: {
            // ignore
        } break;
        default: {
            assert(NO);
        } break;
    }
}
您的代码很奇怪:

  • 实现输入流的事件(
    nsstreamventhasbytesavailable

  • 数据不是一部分写的,但是你必须一部分一部分地发送。部件的大小由操作系统决定。如果数据较大,则必须在事件的委托方法中写入下一部分
    nsstreamventhassspaceavailable
    。但你不在那里写。而是设置接收到的数据

  • 请看这里: