私は現在、JSON
ファイルのデータを解析して表示するtableViewを持っています。セルが押されると、ユーザーはdetailView
画面に移動し、詳細情報を表示します。NSPredicateを使用して、 'Favorite'オブジェクトにユーザを追加し、別のTableView(CoreDataなし)に表示されます。
私は今、ユーザーがfavouriteView
(これはtableView
と全く同じ設定、だけ表示される場所にオブジェクトを追加しますボタンを押すことができるように、detailView
内Favourite
ボタンを設定しようとしています
これを達成する最も良い方法は、NSPredicate
を使用することです。私は何時間も探していましたが、私はCoreData
の解決策を見つけることができませんでした。 CoreData
は必要ではないというソースを見つけました)CoreData
を使わずにFavourite
の機能を達成したいと考えています。
detailView
には既にisFavourite
という変数が設定されており、false
からtrue
に設定されています。下記の関連コードをすべてご覧ください。
サンプルJSONオブジェクト:
{
"locations": [
{
"id": "0001",
"name": "Helensburgh Tunnels",
"type": "Tunnels, Beach, Views",
"location": "Helensburgh, South Coast",
"image": "Helensburgh-Tunnels.jpg",
"activity": "Walking, photography, tunnelling",
"isVisited": false,
"isFavourite": false,
"latitude": -34.178985,
"longitude": 150.992867
}
]
}
私はdetailViewに設定しているお気に入りボタン:
@IBOutlet weak var favouriteButton: UIButton!
@IBAction func favouriteButtonTapped(_ sender: Any) {
self.location.isFavourite = self.location.isFavourite ? false : true
print(location.isFavourite)
// Favourite button
if location.isFavourite == false {
favouriteButton?.setImage(UIImage(named: "starLine.png"), for: .normal)
} else {
favouriteButton?.setImage(UIImage(named: "starFull.png"), for: .normal)
}
}
がどのように私はisFavourite = true
に設定されているすべてのオブジェクトを取ることができますtableView
に表示しますか?
これはFavouriteLocationsViewController
クラスのセクションです。このクラスを機能させるには、ここで何を修正する必要がありますか?
class FavouriteLocationsViewController: UITableViewController {
var locations = [Location]()
override func viewDidLoad() {
super.viewDidLoad()
// Remove the title of the back button
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
if let locationJson = readLocation(){
if let locationArray = locationJson["locations"] as? [[String:Any]]{
for location in locationArray{
locations.append(Location.init(locationInfo: location))
}
print(locations.count)
self.tableView.reloadData()
}
}
}
// Filter to show only favourite locations
func filterArrayOfDictonaryWithKeyValueUsingPredicate(arrOfDict: NSArray, keyOfDict: String, strSearchText: String) -> NSArray{
let favouritePredicate = NSPredicate(format: "isFavourite == true")
let arrResult = arrOfDict.filtered(using: favouritePredicate)
return arrResult as NSArray
}
}
ありがとう!しかし、どこでこれを実装すべきですか?私はそれを試して、それは動作するように見えませんでした。私がFavouriteLocationViewControllerのコードを含む質問に加えた編集を見てください。 – joshlorschy