Iphone Can';t使用NSData(包含png)初始化NSMutableData

Iphone Can';t使用NSData(包含png)初始化NSMutableData,iphone,objective-c,initialization,nsdata,nsmutabledata,Iphone,Objective C,Initialization,Nsdata,Nsmutabledata,我的iPhone应用程序中有一个错误。我使用摄像机制作并获取一张照片,然后将其交给methode sendPhoto,methode sendPhoto会将照片发送到TweetPhoto。在我用NSData初始化NSMutableDate之前,一切都很正常。代码如下: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

我的iPhone应用程序中有一个错误。我使用摄像机制作并获取一张照片,然后将其交给methode sendPhoto,methode sendPhoto会将照片发送到TweetPhoto。在我用NSData初始化NSMutableDate之前,一切都很正常。代码如下:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissModalViewControllerAnimated:YES];
    NSData *imageData = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    [self sendPhoto:(NSString*)@"lola" tweet:(BOOL)TRUE photo:(NSData*)imageData tags:(NSString*)@"" longitude:(float)1024 latitude:(float)512];
}
以下是sendPhoto方法:

- (void)sendPhoto:(NSString*)message tweet:(BOOL)tweet photo:(NSData*)photo tags:(NSString*)tags longitude:(float)longitude latitude:(float)latitude {
    NSString *url;
    if (tweet) {
        url = [NSString stringWithFormat:@"http://www.tweetphoto.com/uploadandpostapiwithkey.php"];
    } else {
        url = [NSString stringWithFormat:@"http://www.tweetphoto.com/uploadapiwithkey.php"];
    }

    NSString * boundary = @"tweetPhotoBoundaryParm";
    NSMutableData *postData = [NSMutableData dataWithCapacity:[photo length] + 1024];
    //!!!Here is the error!!!!                      
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

    NSString * userNameString = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"username\"\r\n\r\n%@", [prefs stringForKey:@"username_preference"]];
    NSString * passwordString = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"password\"\r\n\r\n%@", [prefs stringForKey:@"password_preference"]];
    NSString * apiString = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"api_key\"\r\n\r\n3eceaa7c-6d4d-41ab-be90-2a780e2d1961"];
    NSString * messageString = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"message\"\r\n\r\n%@", message];
    NSString * tagsString = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"tags\"\r\n\r\n%@", tags];
    NSString * latString = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"latitude\"\r\n\r\n%f", latitude];
    NSString * longString = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"longitude\"\r\n\r\n%f", longitude];
    NSString * boundaryString = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary];
    NSString * boundaryStringFinal = [NSString stringWithFormat:@"\r\n--%@--\r\n", boundary];

    [postData appendData:[boundaryString dataUsingEncoding:NSUTF8StringEncoding]];
    [postData appendData:[userNameString dataUsingEncoding:NSUTF8StringEncoding]];
    [postData appendData:[boundaryString dataUsingEncoding:NSUTF8StringEncoding]];
    [postData appendData:[passwordString dataUsingEncoding:NSUTF8StringEncoding]];
    [postData appendData:[boundaryString dataUsingEncoding:NSUTF8StringEncoding]];
    [postData appendData:[apiString dataUsingEncoding:NSUTF8StringEncoding]];
    [postData appendData:[boundaryString dataUsingEncoding:NSUTF8StringEncoding]];
    //(...)
}
(sendImage方法是通过)

控制台还显示:*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*-[UIImage length]:未识别的选择器发送到实例0x3b28df0”


谢谢你的帮助。也许我在代码中犯了一个愚蠢的错误,但请不要生气,因为我刚刚学习编程2个半星期。

你到底犯了什么错误?换句话说,是什么让你认为你所指的那一行有错误


如果它崩溃了,控制台会显示哪些错误?

听起来您是在向该方法传递UIImage,而不是NSData块。你能尝试记录photo参数吗?

它只是崩溃了-我知道错误一定在那里,因为我用断点尝试了它。哦,控制台说:**由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:'***-[UIImage length]:无法识别的选择器发送到实例0x3b28df0'应用程序在此行中崩溃。我在这一行之后和之前用/*代码进行了尝试,应用程序就在这一行崩溃了。当然,我也尝试过使用断点,在这一行中,应用程序崩溃。“崩溃”可能意味着任何事情。崩溃的原因将打印到调试控制台。没有这些信息,任何人都很难确定崩溃的原因。哦,控制台说:**由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“***-[UIImage length]:发送到实例0x3b28df0的未识别选择器”我是否使用了CameraPicker right
NSData*imageData=[info objectForKey:@“UIImagePickerControllerOriginalImage”];
?我可以像在sendPhoto方法中那样获得它的长度吗?但我写了:
NSData*imageData=[info objectForKey:@“UIImagePickerControllerOriginalImage”];
,是不是错了?我怎么能/应该记录照片参数?多亏了你。刚刚写下:
UIImage*images=[info objectForKey:@“UIImagePickerControllerOriginalImage”];NSData*imageData=uiimagejpegresentation(images,1);
为了将来的参考,你可以使用NSLog(@“photo:%@”,photo);