안녕하세요 모든 질문을 처음 게시합니다. 오랜 시간 동안 다른 질문의 이점을 얻었으니 여기에 질문에 답하는 모든 이들에게 감사의 말을 전하고 싶습니다.iOS api에서 로컬 RESTful Django 호출이 실패합니다.
내 질문에. 그래서 JSON 객체를 브라우저에 제대로 반환하는 로컬 Django 서버를 설정했습니다. 나는 또한 자습서 HTTP 서버에서 제대로 작동하는 swift를 사용하여 IOS에서 스키마를 쿼리하는 API를 설정했습니다. 나는 내 데이터 및 응답 객체가 빈 채로있는 내 자신의 로컬 서버를 호출하려고하지만 경우
내 장고 view.py 및 url.py 파일
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.response import Response
from snippets.models import Snippet
from django.http import Http404
from snippets.serializers import SnippetSerializer
class SnippetList(APIView):
"""
List all snippets, or create a new snippet.
"""
def get(self, request, format=None):
snippets = Snippet.objects.all()
serializer = SnippetSerializer(snippets, many=True)
return Response(serializer.data)
def post(self, request, format=None):
serializer = SnippetSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class SnippetDetail(APIView):
"""
Retrieve, update or delete a snippet instance.
"""
def get_object(self, pk):
try:
return Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
raise Http404
def get(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet)
return Response(serializer.data)
def put(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk, format=None):
snippet = self.get_object(pk)
snippet.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
내 아이폰 OS API 파일
import Foundation
import SwiftyJSON
typealias ServiceResponse = (JSON, NSError?) -> Void
class RestApiManager: NSObject {
static let sharedInstance = RestApiManager()
let baseURL = "http://127.0.0.1:8000/snippets/?format=json"
func getRandomUser(onCompletion: (JSON) -> Void) {
let route = baseURL
makeHTTPGetRequest(route, onCompletion: { json, err in
onCompletion(json as JSON)
})
}
func makeHTTPGetRequest(path: String, onCompletion: ServiceResponse) {
let request = NSMutableURLRequest(URL: NSURL(string: path)!)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
print(data)
print(response)
print(error)
print("list")
let json:JSON = JSON(data: data!)
onCompletion(json, error)
})
task.resume()
}
내 테이블 행을 동적으로 추가하는 컨트롤러보기
import UIKit
import MapKit
import CoreLocation
import SwiftyJSON
class TableMenu: UIViewController, UITableViewDataSource, UITableViewDelegate {
var tableView:UITableView?
var items = NSMutableArray()
override func viewWillAppear(animated: Bool) {
let frame:CGRect = CGRect(x: 0, y: 100, width: self.view.frame.width, height: self.view.frame.height-100)
self.tableView = UITableView(frame: frame)
self.tableView?.dataSource = self
self.tableView?.delegate = self
self.view.addSubview(self.tableView!)
let btn = UIButton(frame: CGRect(x: 0, y: 25, width: self.view.frame.width, height: 50))
btn.backgroundColor = UIColor.cyanColor()
btn.setTitle("Add new Dummy", forState: UIControlState.Normal)
btn.addTarget(self, action: #selector(TableMenu.addDummyData), forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(btn)
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count;
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("CELL") as UITableViewCell!
if cell == nil {
cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "CELL")
}
let user:JSON = JSON(self.items[indexPath.row])
print(user)
//let picURL = user["picture"]["medium"].string
//print(picURL)
//let url = NSURL(string: picURL!)
//let data = NSData(contentsOfURL: url!)
//print(user)
cell!.textLabel?.text = user.string //user["username"].string
// cell?.imageView?.image = UIImage(data: data!)
return cell!
}
func addDummyData() {
RestApiManager.sharedInstance.getRandomUser { json in
let results = json.array
for Json: JSON in results! {
let user: AnyObject = Json["id"].string!
print(user)
self.items.addObject(user)
dispatch_async(dispatch_get_main_queue(),{
self.tableView?.reloadData()
})
}
}
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
오류 개체 f를 인쇄 할 때 오류가 발생합니다. 롬 dataTaskWithRequest 방법 나는이에 대한 답변을 위해 잠시 동안 여기에보고
Optional(Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo={NSUnderlyingError=0x12dd99a50 {Error Domain=kCFErrorDomainCFNetwork Code=-1004 "(null)" UserInfo={_kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLStringKey=http://127.0.0.1:8000/snippets/?format=json, NSErrorFailingURLKey=http://127.0.0.1:8000/snippets/?format=json, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=61, NSLocalizedDescription=Could not connect to the server.})
얻을 수 있지만, 모든 것을위한 인증에 대해 내가 내가 액세스위한 인증을 필요로 특정 데이터베이스 사용자를 제공하기 전에 통신이 둘을 얻어서 ID의 시작을 생각
감사합니다.
미래의 질문을 적극적으로 받기 위해 제 스택 오버플로 에티켓을 비평하십시오. 앱 운송 보안의 일환으로, 애플은 iOS 앱에서 모든 보안되지 않은 HTTP 트래픽을 사용할 수있다 info.plist
과거에 처음으로 게시물을 검토 한 사람으로 말하면이 사람은 우수합니다. –
그러나 http://stackoverflow.com/q/32936183/5276890의 사본이기도합니다. 요청하기 전에 Google 스택 오버플로를하시기 바랍니다. 나는 'NSURLErrorDomain 1004'에 대한 검색과 함께 5 분 후에 이것을 발견했다. –
Roy 자습서를 얻으려는 것을 잊어 버렸고, API를 작동 시키려면 임의의 하중을 허용해야했다. 내 질문의 새 편집 된 버전에 내 plist 파일의 스크린 샷을 추가했습니다. –