Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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
Iphone 如何从iOS应用程序向Django应用程序发送XML POST数据?_Iphone_Objective C_Django_Ios_Django Views - Fatal编程技术网

Iphone 如何从iOS应用程序向Django应用程序发送XML POST数据?

Iphone 如何从iOS应用程序向Django应用程序发送XML POST数据?,iphone,objective-c,django,ios,django-views,Iphone,Objective C,Django,Ios,Django Views,我正在尝试在iOS游戏应用程序中实现在线排行榜,使用Django处理来自iDevice的POST请求并存储分数。我已经知道如何让Django将对象序列化为XML,我的iPhone可以读取和显示分数。然而,我无法让我的iPhone将XML发布到Django服务器 下面是我用来发布分数的函数 iOS(Objective-C)控制器: 老实说,我不确定问题是出在Objective-C还是Django代码中。Objective-C是否以正确的格式发送XML?还是Django服务器没有正确处理该XML 如

我正在尝试在iOS游戏应用程序中实现在线排行榜,使用Django处理来自iDevice的POST请求并存储分数。我已经知道如何让Django将对象序列化为XML,我的iPhone可以读取和显示分数。然而,我无法让我的iPhone将XML发布到Django服务器

下面是我用来发布分数的函数

iOS(Objective-C)控制器: 老实说,我不确定问题是出在Objective-C还是Django代码中。Objective-C是否以正确的格式发送XML?还是Django服务器没有正确处理该XML

如有任何见解,将不胜感激。提前谢谢

更新: 我通过编辑iOS控制器将请求的HTTPBody设置为:

NSMutableData *highScoreData = [NSMutableData data];
[highScoreData appendData: [[NSString stringWithFormat: @"player_name=%@;", @"test"] dataUsingEncoding: NSUTF8StringEncoding]];
[highScoreData appendData: [[NSString stringWithFormat: @"score=%d", 0] dataUsingEncoding: NSUTF8StringEncoding]];
[request setHTTPBody: highScoreData];
出于某种原因,在其中添加分号可以让Django识别它,将值分配给HighScore类的新实例,然后保存它。测试服务器上的日志记录表明
请求。POST

我仍然不太确定如何处理这一切

根据建议,在将highScoreData添加到request.HTTPBody之后,我使用NSLog查看了highScoreData,结果是


我是一个巨大的Obj-C noob,所以再次感谢您的帮助!再次感谢。

由于您可以控制双方,因此我会降低xml编码数据的复杂性,并使用RestKit或其他一些框架,以便与Django轻松通信。

将xml存储在字符串中,然后使用NSLog查看它,对发送和接收的xml执行此操作。这样,你就知道问题出在哪里了。谢谢你的建议!我尝试了
NSLog(@“%@”,highScoreData)
并在上面发布了结果。问题在于格式,结果是十六进制的。很高兴你让它工作了。快乐编码
from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.core import serializers
from django.core.exceptions import ValidationError
from django.views.decorators.csrf import csrf_exempt

from modologger.taptap.models import HighScore

@csrf_exempt
def leaderboard( request, xml = False, template_name = 'apps/taptap/leaderboard.html' ):
    """Returns leaderboard."""
    if xml == True: # xml is set as True or False in the URLConf, based on the URL requested
        if request.method == 'POST':
            postdata = request.POST.copy()
            print postdata
                # here, postdata is evaluated as: 
                # <QueryDict: {u'<?xml version': [u'"1.0" encoding="UTF-8" ?><player_name>test</player_name<score>0</score></xml>']}>
            for deserialized_object in serializers.deserialize('xml', postdata):    # this fails, returning a 500 error
                try:
                    deserialized_object.object.full_clean()
                except ValidationError, e:
                    return HttpResponseBadRequest
                deserialized_object.save()
        else:   
            high_score_data = serializers.serialize( 'xml', HighScore.objects.all() )
            return HttpResponse( high_score_data, mimetype = 'text/xml' )
    else:
        high_scores = HighScore.objects.all()
        return render_to_response( template_name, locals(), context_instance = RequestContext( request ) )
NSMutableData *highScoreData = [NSMutableData data];
[highScoreData appendData: [[NSString stringWithFormat: @"player_name=%@;", @"test"] dataUsingEncoding: NSUTF8StringEncoding]];
[highScoreData appendData: [[NSString stringWithFormat: @"score=%d", 0] dataUsingEncoding: NSUTF8StringEncoding]];
[request setHTTPBody: highScoreData];