Как предварительно заполнить данные в Swift? - PullRequest
1 голос
/ 06 октября 2019

У меня возникла проблема при попытке сохранить кучу элементов со свойствами в моем приложении. То, что я уже попробовал (и в основном работает), это создание моего пользовательского класса:

class Waterz {

var entitle: String? = nil
var artitle: String? = nil
var isFavorited: Bool? = nil
var date: [String]? = nil
var frequency: [daysOfWeek]? = nil
var subMenus: Array<Waterz>? = nil
var content: String? = nil
var location: String? = nil
var audio: [(String, reciterNames)]? = nil

init() {
}

convenience init(entitle: String, artitle: String, isFavorited: Bool?, date: [String]?, frequency: [daysOfWeek]?, content: String?, location: String?, audio: [(String, reciterNames)]?) {
    self.init()
    ...
}

}

, а затем я сделал другой класс, где у меня есть база данных:

class WaterzBank {

// all
var allItems: [Waterz]
var allDuas: [Waterz]
var allAmal: [Waterz]

// main categories
var mainCategories: Waterz

// individual categories
    var duaKumayl: Waterz
    var duaMakarem: Waterz
    var duaNudba: Waterz

... (like 5 thousand more)
}

// Initialize them here
init() {
    duaKumayl = Waterz(entitle: "Dua Kumayl", artitle: "دعاء كميل", isFavorited: false, date: ["1-27"], frequency: [.sunday], content: "kumayl", location: nil, audio: nil)
    duaMakarem = Waterz(entitle: "Dua Makarem Al-Akhlaaq", artitle: "دعاء مكارم الأخلاق", isFavorited: true, date: ["1-27"], frequency: [.sunday, .everyday], content: "duaMakaremAlAkhlaaq", location: nil, audio: nil)
    duaNudba = Waterz(entitle: "Dua Nudba", artitle: "دعاء النّدبة", isFavorited: true, date: nil, frequency: nil,  content: "duaNudba", location: nil, audio: nil)

    ...(initializing all the other variables)

    favorites = Waterz(entitle: "Favorites", artitle: "المفضلة", subMenus: allItems.filter {
        $0.isFavorited == true
    })


    // MARK: - Main

    mainCategories = Waterz(entitle: "Categories", artitle: "الأقسام", subMenus: [duas, amal, ziyarat, munajat, taqeebat, others, favorites])
}

Все работает с этимнастройки, за исключением постоянного изменения статуса избранных элементов (пользователем все начинается как избранное, но я хочу, чтобы они могли это изменить). Я пробовал так много способов, как использование прямого Realm, разбор JSON в Realm, CoreData, UserDefaults, но ни один из них не сработал для меня.

Так что все начинается как фавориты. Когда пользователь пытается избрать одного из них. Это работает, но когда они закрывают приложение и снова открывают его, оно возвращается в избранное.

Единственное, что пользователь должен иметь возможность изменить, это свойство isFavorited. Все остальное я установил, и оно приходит с приложением, как только вы загрузите его.

Что мне делать в этом случае? Должен ли я полностью изменить свою систему? Есть ли способ проанализировать все мои инициализированные переменные в базе данных области? Если да, смогу ли я разобрать такие вещи, как audio, который имеет тип [(String, Enum.type)]? Это мое первое приложение, и я действительно запутался. Спасибо за вашу помощь.

...