[Swift] [Parse] 일대다 관계에서 데이터 추출(Xcode6beta5,Parse.com)
A. 개요
[참고] ViewController가 VC로 표시됩니다.
1. 사용자를 foreignkey로 Tweet 게시
먼저 스토리보드와 코코아 터치 클래스에 트윗의 VC를 게시한다.swift라는 파일을 만듭니다.
다음은 스토리보드에 텍스필드와 버튼을 준비하고 투고할 수 있는 형식을 준비한다.
CompooseVC는 위의 두 가지 사항을 완료한 후swift에 다음 함수를 추가합니다.
ComposeViewController.swift
@IBOutlet var tweetTextView: UITextView! = UITextView()
@IBAction func sendTweet(sender: AnyObject) {
// classの作成。特にmigrationとかを書けなくても下記の一行でテーブルが作成されます。
var tweet:PFObject = PFObject(className: "Tweets")
// 生成するデータ
tweet["content"] = tweetTextView.text
tweet["tweeter"] = PFUser.currentUser()
tweet.saveInBackground()
self.navigationController.popToRootViewControllerAnimated(true)
}
이렇게 하면 conntent와 Twitter라는 열이 생성됩니다.(두 번째 이후에는 데이터가 존재하는 열에 들어간다.)
이 열에foreignkey로 현재 사용자의 ObjectId를 삽입합니다.이 정도면 됐어.
그리고 스토리보드에서 @IBOutlet로 끌어 동작을 연결시킨다.
2. 현재 사용자의 Tweet을 TableView로 표시
먼저 스토리보드에 TableVC를 제작하고 다음 두 개의 파일을 동시에 제작한다.(Cocoa touch class 선택)
@IBOutlet var tweetTextView: UITextView! = UITextView()
@IBAction func sendTweet(sender: AnyObject) {
// classの作成。特にmigrationとかを書けなくても下記の一行でテーブルが作成されます。
var tweet:PFObject = PFObject(className: "Tweets")
// 生成するデータ
tweet["content"] = tweetTextView.text
tweet["tweeter"] = PFUser.currentUser()
tweet.saveInBackground()
self.navigationController.popToRootViewControllerAnimated(true)
}
먼저 스토리보드에 TableVC를 제작하고 다음 두 개의 파일을 동시에 제작한다.(Cocoa touch class 선택)
(Cell의 클래스는 스토리보드 왼쪽 하단의 Doctument Outline에서 시작됩니다.)
다음은 MyTweetTableViewCell 입니다.swift를 편집합니다.
MyTweetTableViewCell.swift
import UIKit
class MyTweetTableViewCell: UITableViewCell {
// ストーリーボードでtextViewを追加しておいて、下記のIBOutletとひもづける
@IBOutlet weak var tweetTextView: UITextView! = UITextView()
required override convenience init(style: UITableViewCellStyle, reuseIdentifier: String) {
self.init(style: style, reuseIdentifier: reuseIdentifier)
// Initialization code
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
다음은 My Timeline TableV입니다.swift를 편집합니다.MyTlimelineTableVC.swift
import UIKit
class MyTimelineTableViewController: UITableViewController {
var timelineData:NSMutableArray = NSMutableArray()
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
func loadData(){
timelineData.removeAllObjects()
// Tweetsテーブルを参照
var findCurrentUserTweets:PFQuery = PFQuery(className: "Tweets")
// Tweetsテーブルのtweeterカラムから現在のユーザーのobjectidと一致するデータを抽出
findCurrentUserTweets.whereKey("tweeter", equalTo: PFUser.currentUser())
findCurrentUserTweets.findObjectsInBackgroundWithBlock{
(objects:[AnyObject]!, error:NSError!)->Void in
if !error{
for object in objects{
self.timelineData.addObject(object)
}
let array:NSArray = self.timelineData.reverseObjectEnumerator().allObjects
self.timelineData = array as NSMutableArray
self.tableView.reloadData()
}
}
}
override func viewDidAppear(animated: Bool) {
self.loadData()
}
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
// #warning Potentially incomplete method implementation.
// Return the number of sections.
return 1
}
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
// データの数だけrowを返す
return timelineData.count
}
override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell:MyTweetTableViewCell = tableView!.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as MyTweetTableViewCell
let tweet:PFObject = self.timelineData.objectAtIndex(indexPath!.row) as PFObject
cell.tweetTextView.text = tweet.objectForKey("content") as String
return cell
}
}
관계식을 사용하는 섹션에는 다음 두 줄만 있습니다.MyTimelineTableVC.swift
// Tweetsテーブルを参照
var findCurrentUserTweets:PFQuery = PFQuery(className: "Tweets")
// Tweetsテーブルのtweeterカラムから現在のユーザーのobjectidと一致するデータを抽出
findCurrentUserTweets.whereKey("tweeter", equalTo: PFUser.currentUser())
이렇게 되면 일반적인 시간선에서 모든 사용자의 데이터를 재생할 수 있다내 페이지에는 자신의 타임라인만 재생되었다.
(통상적인 타임라인에 대해서는 과거 기사를 참조하세요)
3. 과거 관련 기사
Reference
이 문제에 관하여([Swift] [Parse] 일대다 관계에서 데이터 추출(Xcode6beta5,Parse.com)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kiiita/items/d59a51547c77969c7e5c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)