У меня есть очень простая модель, определенная: < /p>
@Model
final class Movie: Identifiable {
#Index\(\[.name\])
var id = UUID()
var name: String
var genre: String?
init(name: String, genre: String?) {
self.name = name
self.genre = genre
}
}
< /code>
Я включил отладку SQL, включив «-com.apple.coredata.sqldebug 3 'аргумент при запуске. Следующий код, он изначально выбирает 3 записи, но затем также выбирает каждую запись индивидуально, даже если я не ссылаюсь на какие -либо другие атрибуты. < /p>
var fetchDescriptor = FetchDescriptor\()
fetchDescriptor.propertiesToFetch = \[.id, .name\]
fetchDescriptor.fetchLimit = 3
do {
print("SELECT START")
movies = try modelContext.fetch(fetchDescriptor)
print("SELECT END")
} catch {
print("Failed to load Movie model.")
}
< /code>
Вот информация отладки: < /p>
SELECT START
CoreData: annotation: fetch using NSSQLiteStatement on entity 'Movie' with sql text 'SELECT 1, t0.Z_PK, t0.ZID, t0.ZNAME FROM ZMOVIE t0 LIMIT 3' returned 3 rows with values: (
CoreData: annotation: fetch using NSSQLiteStatement on entity 'Movie' with sql text 'SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZGENRE, t0.ZID, t0.ZNAME FROM ZMOVIE t0 WHERE t0.Z_PK = ? ' returned 1 rows
CoreData: annotation: fetch using NSSQLiteStatement on entity 'Movie' with sql text 'SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZGENRE, t0.ZID, t0.ZNAME FROM ZMOVIE t0 WHERE t0.Z_PK = ? ' returned 1 rows
CoreData: annotation: fetch using NSSQLiteStatement on entity 'Movie' with sql text 'SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZGENRE, t0.ZID, t0.ZNAME FROM ZMOVIE t0 WHERE t0.Z_PK = ? ' returned 1 rows
SELECT END
< /code>
Я вижу, как он выбирает 3 Rows initysy, но затем он выбирает каждый отдельно. Зачем это делать на начальном выборе? Я надеялся выбрать данные, которые я хочу отобразить, и позволить системе выбрать всю запись только тогда, когда я получаю доступ к переменной, которую я изначально не получил.
Подробнее здесь: https://stackoverflow.com/questions/794 ... -each-reco