Я пытаюсь использовать RestKit в Swift с заголовком моста. У меня есть JSON-файл с URL "http://local:8888/api/0.1/jobs"Использование RestKit и CoreData с Swift
{"data":[{"id": "1", "name": "job1",..},{"id": "2", "name": "job2",...},...]}
JSON файл имеет 6 элементов задания. Я создал объект Job для CoreData и сгенерировал класс Job.
я создал RestKit таким образом:
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:
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 вернуть значение и Tableview numberOfRowsInSection возвращает значение слишком.
Я пытаюсь найти множество решений, переведя код из Objective-C, потому что на Swit очень мало примеров использования RestKit.
Я могу получить доступ к данным из JSON с помощью среды SwiftyJson, а также самостоятельно проверить конфигурацию элемента хранилища в базе данных CoreData.
Я хочу получить 6 рабочих заданий, которые я создал с помощью этого простого RestApi, и распечатать его в таблице tableView.
Я думаю, что у меня что-то не так во время настройки, но я не знаю, что это такое.
Возможно, что у меня что-то не хватает, поскольку я не использовал RestKit с CoreData, но я вижу, откуда вы извлекаете данные из CoreData с помощью 'NSFetchedResultsController', но я не вижу ничего, что на самом деле заставляют данные извлекаться с сервера. –
Спасибо, Дэвид, я шутка, мне просто нужно использовать 'manager.getObjectsAtPath (...)' – MeaK
NP Meak, у всех нас есть наши мозговые пукалы. Я предлагаю закрыть это как опечатку. –