반응형
LinkedIn
개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github
WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish
내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.
Recent Posts
Recent Comments
- Total
꿈꾸는리버리
[iCloudKit 시리즈 2.1] 나도 백엔드 있다 - iCloud CRUD 해보기 본문
반응형
🌷 iCloud 시리즈 목차
4) 여러 에러나 마주했던 문제 상황들 ...
💕 iCloud CRUD 단계
우선 이 부분이 기본적으로 CRUD를 제공하는 타입이다..! 이번 포스팅에서는 얘네들만 다룰 예정이다..! 다음 포스팅 때 이미지나 오디오, 비디오를 저장하는 방법에 대해 알아볼 예정입니당
1️⃣ Read
private func fetchItems() {
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Fruit", predicate: predicate)
var returnedItems: [FruitModel] = []
queryOperation.recordMatchedBlock = { (returnedRecordID, returnedResult) in
switch returnedResult {
case .success(let record):
guard let name = record["name"] as? String else { return }
returnedItems.append(FruitModel(name: name, record: record))
case .failure(let error):
print("Error: \(error)")
}
}
queryOperation.queryResultBlock = { [weak self] returnedResult in
print("RETURNED RESULT: \(returnedResult)")
DispatchQueue.main.async {
self?.fruits = returnedItems
}
}
addOperation(operation: queryOperation)
}
private func addOperation(operation: CKDatabaseOperation) {
CKContainer.default().publicCloudDatabase.add(operation)
}
2️⃣ Create
따로 iCloud 페이지에서 Record를 추가하지 않아도 새로 추가가 되면 자동으로 생성된다. ( 프로퍼티도 )
+) 추가적으로 optional을 허용하는가, Relation을 설정할 수 있는가는 다음에 추가적으로 공부해서 올리도록 하겠슘둥
private func addItem(name: String) {
let newFruit = CKRecord(recordType: "Fruit")
newFruit["name"] = name
saveItem(record: newFruit)
}
private func saveItem(record: CKRecord) {
CKContainer.default().publicCloudDatabase.save(record) { [weak self] returnedRecord, returnedError in
print("Record: \(returnedRecord)")
print("Error: \(returnedError)")
DispatchQueue.main.async {
// 여기서 다시 Fetch해도 되고
// 다시 불러오는 게 너무 무거우면 성공시 UI에서 추가되도록 구현하는 것도 한 방법
self?.fetchItems()
}
}
}
3️⃣ Update
func updateItem(fruit: FruitModel) {
let record = fruit.record
record["name"] = "NEW NAME!"
saveItem(record: record)
}
4️⃣ Delete
func deleteItem(idexSet: IndexSet) {
guard let index = idexSet.first else { return }
let fruit = fruits[index]
let record = fruit.record
CKContainer.default().publicCloudDatabase.delete(withRecordID: record.recordID) { [weak self] returnedRecordID, returnedError in
DispatchQueue.main.async {
self?.fruits.remove(at: index)
}
}
}
우선 public Data 경우의 CRUD를 알아봤다.
다음으로는 Coredate -> iCloud로 변경하는 방법도 작성해보겠습니다. ( 구조가 거의 똑같아서 간단할 거 같긴 함 )
반응형
'오뚝이 개발자 > SwiftUI' 카테고리의 다른 글
[iCloudKit 시리즈 3] 나도 백엔드 있다 - Coredata -> iCloud로 변경하기 (0) | 2024.10.01 |
---|---|
[iCloudKit 시리즈 2.2] 나도 백엔드 있다 - 이미지, 비디오, 오디오 CRUD하기 (0) | 2024.10.01 |
[iCloudKit 시리즈 1] 나도 백엔드 있다 - iCloud 세팅과 개념 그리고 유저 연결하기 (1) | 2024.09.27 |
info.plist localization string (0) | 2024.08.15 |
[SwiftUI] 내 앱 설정화면으로 이동 (0) | 2024.07.25 |
Comments