Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 12 additions & 8 deletions YeolpumtaClone.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

/* Begin PBXBuildFile section */
2296F3E462DE79581FEF0FD7 /* Pods_YeolpumtaClone.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F240E6EDDA8440264E1F9D6E /* Pods_YeolpumtaClone.framework */; };
4246D06D268DFC2900676BD2 /* ObjectForAdd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4246D06C268DFC2900676BD2 /* ObjectForAdd.swift */; };
428C96FB2680CBB3009B8E0D /* CalendarCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 428C96F62680CBB3009B8E0D /* CalendarCell.swift */; };
428C96FC2680CBB3009B8E0D /* StatisticsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 428C96F72680CBB3009B8E0D /* StatisticsCell.swift */; };
428C96FD2680CBB3009B8E0D /* MenuBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 428C96F82680CBB3009B8E0D /* MenuBar.swift */; };
Expand Down Expand Up @@ -37,6 +38,7 @@
/* Begin PBXFileReference section */
03174D305EDA1C3BA6C26926 /* Pods-YeolpumtaClone.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-YeolpumtaClone.release.xcconfig"; path = "Target Support Files/Pods-YeolpumtaClone/Pods-YeolpumtaClone.release.xcconfig"; sourceTree = "<group>"; };
15BB2CD8CEE5BA889310A14D /* Pods-YeolpumtaClone.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-YeolpumtaClone.debug.xcconfig"; path = "Target Support Files/Pods-YeolpumtaClone/Pods-YeolpumtaClone.debug.xcconfig"; sourceTree = "<group>"; };
4246D06C268DFC2900676BD2 /* ObjectForAdd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObjectForAdd.swift; sourceTree = "<group>"; };
428C96F62680CBB3009B8E0D /* CalendarCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalendarCell.swift; sourceTree = "<group>"; };
428C96F72680CBB3009B8E0D /* StatisticsCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatisticsCell.swift; sourceTree = "<group>"; };
428C96F82680CBB3009B8E0D /* MenuBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuBar.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -87,6 +89,14 @@
path = Pods;
sourceTree = "<group>";
};
4246D06A268DFC0900676BD2 /* Model */ = {
isa = PBXGroup;
children = (
4246D06C268DFC2900676BD2 /* ObjectForAdd.swift */,
);
path = Model;
sourceTree = "<group>";
};
428C96F52680CB3D009B8E0D /* Insights */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -120,9 +130,9 @@
6B3A20B3267606B800F3D04C /* YeolpumtaClone */ = {
isa = PBXGroup;
children = (
4246D06A268DFC0900676BD2 /* Model */,
6BC6F02E267B63010080A172 /* Extension */,
6B3A20DA267611E700F3D04C /* Constant */,
6B3A20CB2676073C00F3D04C /* Model */,
6B3A20CA2676073A00F3D04C /* View */,
6B3A20C92676073800F3D04C /* Controller */,
6B3A20CD2676074800F3D04C /* Service */,
Expand Down Expand Up @@ -164,13 +174,6 @@
path = View;
sourceTree = "<group>";
};
6B3A20CB2676073C00F3D04C /* Model */ = {
isa = PBXGroup;
children = (
);
path = Model;
sourceTree = "<group>";
};
6B3A20CD2676074800F3D04C /* Service */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -356,6 +359,7 @@
428C96FF2680CBB3009B8E0D /* Statistics.swift in Sources */,
6B3A20B7267606B800F3D04C /* SceneDelegate.swift in Sources */,
BD6A4530268184C1001F4808 /* EmailRegisterViewController.swift in Sources */,
4246D06D268DFC2900676BD2 /* ObjectForAdd.swift in Sources */,
BD6A4526267B1EF9001F4808 /* FirstViewController.swift in Sources */,
428C96FD2680CBB3009B8E0D /* MenuBar.swift in Sources */,
6B3A20CF2676077900F3D04C /* InsightsViewController.swift in Sources */,
Expand Down
136 changes: 132 additions & 4 deletions YeolpumtaClone/Controller/Home/AddObjectController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@

import UIKit
import SnapKit
import SQLite3

class AddObjectController: UIViewController {
// MARK: - Properties

private let objectLabel: UILabel = {
let label = UILabel()
label.text = "측정할 과목 이름"
Expand Down Expand Up @@ -43,10 +44,18 @@ class AddObjectController: UIViewController {
bt.layer.cornerRadius = 40 / 2
bt.backgroundColor = .red
bt.addTarget(self, action: #selector(didTapColorButton), for: .touchUpInside)

return bt
}()

// for SQLite
var objectList = [ObjectForAdd]() {
didSet { HomeViewController().tableView.reloadData() }
}

let tableOne = "TableOne"
let tableTwo = "TableTwo"

var db: OpaquePointer?

// MARK: - Lifecycle
override func viewDidLoad() {
Expand All @@ -56,6 +65,9 @@ class AddObjectController: UIViewController {

configureNavBar()
configureUI()
makeQuery()

// deleteAll()
}

// MARK: - Helpers
Expand All @@ -67,9 +79,8 @@ class AddObjectController: UIViewController {
navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "chevron.backward"), style: .done, target: self, action: #selector(handleDismissal))
navigationItem.leftBarButtonItem?.tintColor = .white

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "추가", style: .done, target: self, action: #selector(handleDismissal))
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "추가", style: .done, target: self, action: #selector(makeTable))
navigationItem.rightBarButtonItem?.tintColor = .white

}

private func configureUI() {
Expand Down Expand Up @@ -100,6 +111,112 @@ class AddObjectController: UIViewController {
}
}

// MARK: - SQLite

func makeQuery() {
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("\(tableOne)Database.sqlite")

if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
print("error opening database")
}


let createTableString = """
CREATE TABLE IF NOT EXISTS \(tableOne) (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT)
"""

if sqlite3_exec(db, createTableString, nil, nil, nil) != SQLITE_OK {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error creating table: \(errmsg)")
}
}

@objc func makeTable() {
let name = textField.text?.trimmingCharacters(in: .whitespacesAndNewlines)

if(name?.isEmpty)!{
textField.layer.borderColor = UIColor.red.cgColor
return
}

var stmt: OpaquePointer?
let queryString = "INSERT INTO \(tableOne) (name) VALUES (?)"

if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing insert: \(errmsg)")
return
}

if sqlite3_bind_text(stmt, 1, name, -1, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure binding name: \(errmsg)")
return
}

if sqlite3_step(stmt) != SQLITE_DONE {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure inserting hero: \(errmsg)")
return
}

textField.text = ""

readValues()

print("Hero saved successfully")

handleDismissal()
}

func readValues(){

objectList.removeAll()

let queryString = "SELECT * FROM \(tableOne)"

var stmt:OpaquePointer?

if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing insert: \(errmsg)")
return
}

while(sqlite3_step(stmt) == SQLITE_ROW){
let id = sqlite3_column_int(stmt, 0)
let name = String(cString: sqlite3_column_text(stmt, 1))

objectList.append(ObjectForAdd(id: Int(id), name: String(describing: name)))
}
}

// 모든 테이블 삭제
func deleteAll() {
var deleteStatement: OpaquePointer?
let deleteStatementString = "DROP TABLE \(tableOne)"

if sqlite3_prepare_v2(db, deleteStatementString, -1, &deleteStatement, nil) ==
SQLITE_OK {

if sqlite3_step(deleteStatement) == SQLITE_DONE {
print("\nSuccessfully deleted table.")

} else {
print("\nCould not delete table.")
}
} else {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error creating table: \(errmsg)")
print("\nDELETE statement could not be prepared")
}
sqlite3_finalize(deleteStatement)
}


// MARK: - Actions

@objc private func handleDismissal() {
Expand All @@ -122,3 +239,14 @@ extension AddObjectController: UIColorPickerViewControllerDelegate {
}
}

// color를 데이터로 저장할 때 사용 - https://stackoverflow.com/questions/17230720/best-way-to-save-and-retrieve-uicolors-to-core-data
//extension UIColor {
//
// class func color(data:Data) -> UIColor? {
// return try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? UIColor
// }
//
// func encode() -> Data? {
// return try? NSKeyedArchiver.archivedData(withRootObject: self, requiringSecureCoding: false)
// }
//}
Loading