Swift에서 Bridging Header를 사용하여 RestKit을 사용하려고합니다. 나는 URL과 JSON 파일 "http://local:8888/api/0.1/jobs"Swift에서 RestKit 및 CoreData 사용
{"data":[{"id": "1", "name": "job1",..},{"id": "2", "name": "job2",...},...]}
JSON 파일 6 개 요소 작업이 있습니다. CoreData 용 Job 엔티티를 작성하고 Job 클래스를 생성했습니다.
func setupRestKit() {
var manager = RKObjectManager(baseURL: NSURL(string: "http://local:8888/api/0.1/"))
RKObjectManager.setSharedManager(manager)
var managedObjectModel = NSManagedObjectModel.mergedModelFromBundles(nil)
var managedObjectStore = RKManagedObjectStore(managedObjectModel: managedObjectModel)
manager.managedObjectStore = managedObjectStore
RKManagedObjectStore.setDefaultStore(manager.managedObjectStore)
var jobMapping = RKEntityMapping(forEntityForName: "Job", inManagedObjectStore: manager.managedObjectStore)
jobMapping.identificationAttributes = ["id"]
jobMapping.addAttributeMappingsFromDictionary([
"id" : "id",
"name" : "name"
])
let responseDescriptor = RKResponseDescriptor(
mapping: jobMapping,
method: RKRequestMethod.GET,
pathPattern: "/jobs",
keyPath: "data",
statusCodes: NSIndexSet(index: 200)
)
manager.addResponseDescriptor(responseDescriptor)
managedObjectStore.createPersistentStoreCoordinator()
let storePath = RKApplicationDataDirectory().stringByAppendingPathComponent("MyApp.sql")
var persistentStore = managedObjectStore.addSQLitePersistentStoreAtPath(
storePath,
fromSeedDatabaseAtPath: nil,
withConfiguration: nil,
options: optionsForSqliteStore(),
error: nil
)
managedObjectStore.createManagedObjectContexts()
managedObjectStore.managedObjectCache = RKInMemoryManagedObjectCache(
managedObjectContext: managedObjectStore.persistentStoreManagedObjectContext
)
}
func optionsForSqliteStore() -> NSDictionary {
return [
NSInferMappingModelAutomaticallyOption: true,
NSMigratePersistentStoresAutomaticallyOption: true
];
}
그리고의 ViewController에서 :
이런 식으로 RestKit을 설정
override func viewDidLoad() {
super.viewDidLoad()
var fetchRequest = NSFetchRequest(entityName: "Job")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
self.fetchedResultsController = NSFetchedResultsController(
fetchRequest: fetchRequest,
managedObjectContext: RKManagedObjectStore.defaultStore().mainQueueManagedObjectContext,
sectionNameKeyPath: nil,
cacheName: nil
)
self.fetchedResultsController?.delegate = self
self.fetchedResultsController?.performFetch(nil)
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
if let sections = fetchedResultsController?.sections {
return sections.count
} else {
return 0
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if let sections = fetchedResultsController?.sections {
var sectionInfo: AnyObject = sections[section]
return sectionInfo.numberOfObjects
} else {
return 0
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell
if let fetchedResults = fetchedResultsController {
cell.textLabel?.text = fetchedResults.objectAtIndexPath(indexPath).name
}
return cell
}
가 numberOfSectionsInTableView 방법은 반환 값을 값 0하고있는 tableView numberOfRowsInSection을 반환을 0 너무.
Restikit을 사용하는 Swift의 예제가 실제로 없기 때문에 Objective-C에서 코드를 변환하여 많은 솔루션을 시도합니다.
SwiftyJson 프레임 워크를 사용하여 JSON의 데이터에 액세스 할 수 있으며 나 또한 CoreData 데이터베이스에서 저장 요소별로 구성을 확인합니다.
이 간단한 RestApi로 작성한 6 가지 작업을 가져와 tableview에 인쇄하고 싶습니다.
구성 중에 뭔가 잘못했다고 생각하지만 그게 무엇인지 모르겠습니다.
CoreData에서 RestKit을 사용하지 않았으므로 뭔가 놓친 것이 가능합니다. 그러나 NSFetchedResultsController를 사용하여 CoreData에서 데이터를 가져 오는 위치를 볼 수는 있지만 실제로는 보이지 않습니다. 서버에서 데이터를 가져옵니다. –
데이비드 고맙다. 나는 농담이다, 나는 단지'manager.getObjectsAtPath (...) '를 사용해야 만한다. – MeaK
NP 미크, 우리 모두는 우리의 두뇌 방귀를 가지고있다. 이 문제를 오타로 끝내는 것이 좋습니다. –