Slide 1

Slide 1 text

QPUBUPUJQT !OBLBKJKBQBO *OUSPEVDJOH $MPVE,JU

Slide 2

Slide 2 text

!OBLBKJKBQBO 4PGUXBSF&OHJOFFS (.01&1"#0JOD J048FC.BD

Slide 3

Slide 3 text

৺ྶಈըΞϓϦ΋͏Ұ౓͝ཡ͍ͨͩ͜͏ IUUQPXLSJOGPNPWJF ৺ྶࣸਅΞϓϦ͓Θ͔Γ͍͚ͨͩͨͩΖ͏͔ IUUQPXLSJOGP J1IPOFήʔϜதౡਗ਼૟ہ GSVTUSBUJPONF IUUQWBDVVNOBLBKJKBQBOOFU IUUQGSVTUSBUJPONF

Slide 4

Slide 4 text

!OBLBKJKBQBO 4PGUXBSF&OHJOFFS (.01&1"#0JOD J048FC.BD w 88%$͍ͬͯདྷ·ͨ͠ w ࠷ۙ͸झຯͰ.BD049ΞϓϦ΍ͬͯ·͢ w "7'PVOEBUJPOपΓΛझຯͰௐ΂ͯ·͢

Slide 5

Slide 5 text

$MPVE,JU

Slide 6

Slide 6 text

"HFOEB w 8IBUJT$MPVE,JU  w 4JNQMF$36% w ໰୊ w ཁௐࠪ w 3FWJFX $MPVE,JU

Slide 7

Slide 7 text

8IBUJT$MPVE,JU w J$MPVETFSWFS΁ͷσʔλసૹΛ؅ཧ w J$MPVEBDDPVOU w .BD049ͱJ04ͷαϙʔτ w 1VCMJD"SFBʹσʔλΛอଘͰ͖Δ $MPVE,JU

Slide 8

Slide 8 text

$MPVE,JU0CKFDUT w $POUBJOFST w %BUBCBTFT w 3FDPSET w 3FDPSE;POFT w 3FDPSE*EFOUJpFST w 3FGFSFODFT w "TTFUT $MPVE,JU

Slide 9

Slide 9 text

3FDPSET w $,3FDPSE w 4USVDUVSFE%BUB w 8SBQTLFZWBMVFQBJST w 3FDPSE5ZQF w +VTUJOUJNFTDIFNB w .FUBEBUB $MPVE,JU

Slide 10

Slide 10 text

4JNQMF$36% $MPVE,JU

Slide 11

Slide 11 text

$SFBUF $MPVE,JU func saveRecord( record: CKRecord!, completionHandler: ((CKRecord!, NSError!) -> Void)!) $,%BUBCBTF

Slide 12

Slide 12 text

$SFBUF $MPVE,JU self.container.publicCloudDatabase.saveRecord( record, completionHandler: { (record:CKRecord!, error:NSError!) -> Void in if error { println("An error occurred in \(error.description)") abort() } else { println("Successfully Created record") } } )

Slide 13

Slide 13 text

%FMFUF $MPVE,JU func deleteRecordWithID( recordID: CKRecordID!, completionHandler: ((CKRecordID!, NSError!) -> Void)!) $,%BUBCBTF

Slide 14

Slide 14 text

%FMFUF $MPVE,JU self.container.publicCloudDatabase.deleteRecordWithID( record.recordID, completionHandler: { (recordID:CKRecordID!, error:NSError!) -> Void in if error { println("An error occured in \(error.description)") abort() } else { println("Successfully deleted record") } } )

Slide 15

Slide 15 text

6QEBUF $MPVE,JU func saveRecord( record: CKRecord!, completionHandler: ((CKRecord!, NSError!) -> Void)!) $,%BUBCBTF GVODGFUDI3FDPSE8JUI*%  SFDPSE*%$,3FDPSE*%  DPNQMFUJPO)BOEMFS $,3FDPSE /4&SSPS 7PJE 

Slide 16

Slide 16 text

6QEBUF $MPVE,JU self.cloudManager.publicDatabase.fetchRecordWithID( model.recordID, completionHandler: { (record:CKRecord!, error:NSError!) -> Void in record.setObject("nakajijapan" , forKey: "screen_name") self.cloudManager.container.publicCloudDatabase.saveRecord( record, completionHandler: { (rec:CKRecord!, err:NSError!) -> Void in if err == nil { println("Successfully deleted record") } } ) } )

Slide 17

Slide 17 text

3FBE $MPVE,JU w $,2VFSZ w 3FDPSE5ZQF w /41SFEJDBUF w /44PSU%FTDSJQUPST

Slide 18

Slide 18 text

3FBE $MPVE,JU w $,2VFSZ w 3FDPSE5ZQF w /41SFEJDBUF w /44PSU%FTDSJQUPST MPHJDBMDPOEJUJPO TPSU

Slide 19

Slide 19 text

3FBE $MPVE,JU let predicate = NSPredicate(format: "title <> ''", argumentArray: nil) /41SFEJDBUF query.sortDescriptors = [NSSortDescriptor(key: "title", ascending: false)] /44PSU%FTDSJQUPST GVODQFSGPSN2VFSZ  RVFSZ$,2VFSZ  JO;POF8JUI*%[POF*%$,3FDPSE;POF*%  DPNQMFUJPO)BOEMFS <"OZ0CKFDU> /4&SSPS 7PJE   $,3FDPSE  $,%BUBCBTF

Slide 20

Slide 20 text

3FBE $MPVE,JU let predicate = NSPredicate(value: true) let query:CKQuery = CKQuery(recordType: "Items", predicate: predicate) self.container.publicDatabase.performQuery( query, inZoneWithID: nil, { (results:[AnyObject]!, error:NSError!) -> Void in if !error { ! for record in results as [CKRecord]! { println(record) } } } )

Slide 21

Slide 21 text

໰୊ $MPVE,JU

Slide 22

Slide 22 text

໰୊ $MPVE,JU 5BCMF7JFXͰQBHJOHͯ͠Έ͍ͨ

Slide 23

Slide 23 text

໰୊ w ϖʔδ৘ใ͍࣋ͬͯΔΘ͚Ͱ͸ͳ͍ w 0GGTFU-JNJUͰͰ͖ΔΘ͚Ͱ΋ͳ͍ $MPVE,JU 5BCMF7JFXͰQBHJOHͯ͠Έ͍ͨ

Slide 24

Slide 24 text

$PSF%BUB $MPVE,JU let request = NSFetchRequest(entityName: "Item") request.fetchOffset = 0 request.fetchLimit = 10 Ͱ͸ύοͱࢥ͍ͭ͘

Slide 25

Slide 25 text

໰୊ $MPVE,JU 5BCMF7JFXͰQBHJOHͯ͠Έ͍ͨ αϯϓϧίʔυ͕ͳ͔ͬͨͷͰυΩϡϝϯτͱʹ ΒΊͬͯࣗ͜͠෼ͳΓʹ࣮૷ͯ͠Έ·ͨ͠ɻ

Slide 26

Slide 26 text

໰୊ $MPVE,JU 5BCMF7JFXͰQBHJOHͯ͠Έ͍ͨ WBSRVFSZ$PNQMFUJPO#MPDL $,2VFSZ$VSTPS /4&SSPS 7PJE  DVSTPS "$,2VFSZ$VSTPSPCKFDUUIBUJOEJDBUFTUIFSFBSFNPSFSFTVMUTUPGFUDIPS OJMJGUIFSFTVMUTQBSBNFUFSDPOUBJOTBMMPGUIFSFNBJOJOHTFBSDISFTVMUT 6TFUIFQSPWJEFEPCKFDUUPJOJUJBMJ[FBOFXRVFSZPQFSBUJPOPCKFDUXIFO ZPVBSFSFBEZUPSFUSJFWFUIFOFYUCBUDIPGSFTVMUT $,2VFSZ0QFSBUJPO

Slide 27

Slide 27 text

໰୊ w $,2VFSZ0QFSBUJPOΛར༻ͨ͠GFUDIํ๏ w SFDPSE'FUDIFE#MPDL w RVFSZ$PNQMFUJPO#MPDL w SFTVMUT-JNJU w $,2VFSZ$VSTPS w OJM࣍ͷϖʔδ͋Γ w OJM࣍ͷϖʔδͳ͠ $MPVE,JU 5BCMF7JFXͰQBHJOHͯ͠Έ͍ͨ

Slide 28

Slide 28 text

໰୊ $MPVE,JU let query:CKQuery = CKQuery(recordType: "Items", predicate: predicate) ! (snip) ! var queryOperation:CKQueryOperation if self.cursor != nil { queryOperation = CKQueryOperation(cursor: self.cursor) } else { queryOperation = CKQueryOperation(query: query) } ! queryOperation.resultsLimit = 10 ! queryOperation.recordFetchedBlock = {(record:CKRecord!) -> Void in self.items.append(record) } ! queryOperation.queryCompletionBlock = { (cursor:CKQueryCursor!, error:NSError!) -> Void in // snip self.cursor = cursor } ! self.container.publicDatabase.addOperation(queryOperation)

Slide 29

Slide 29 text

໰୊ $MPVE,JU let query:CKQuery = CKQuery(recordType: "Items", predicate: predicate) ! (snip) ! var queryOperation:CKQueryOperation if self.cursor != nil { queryOperation = CKQueryOperation(cursor: self.cursor) } else { queryOperation = CKQueryOperation(query: query) } ! queryOperation.resultsLimit = 10 ! queryOperation.recordFetchedBlock = {(record:CKRecord!) -> Void in self.items.append(record) } ! queryOperation.queryCompletionBlock = { (cursor:CKQueryCursor!, error:NSError!) -> Void in // snip self.cursor = cursor } ! self.container.publicDatabase.addOperation(queryOperation)

Slide 30

Slide 30 text

໰୊ $MPVE,JU let query:CKQuery = CKQuery(recordType: "Items", predicate: predicate) ! (snip) ! var queryOperation:CKQueryOperation if self.cursor != nil { queryOperation = CKQueryOperation(cursor: self.cursor) } else { queryOperation = CKQueryOperation(query: query) } ! queryOperation.resultsLimit = 10 ! queryOperation.recordFetchedBlock = {(record:CKRecord!) -> Void in self.items.append(record) } ! queryOperation.queryCompletionBlock = { (cursor:CKQueryCursor!, error:NSError!) -> Void in // snip self.cursor = cursor } ! self.container.publicDatabase.addOperation(queryOperation)

Slide 31

Slide 31 text

ཁௐࠪ $MPVE,JU

Slide 32

Slide 32 text

ཁௐࠪ $MPVE,JU w $,3FDPSE;POF w $,4VCTDSJQUJPO w 0GqJOF$BDIF w &SSPS)BOEMJOH

Slide 33

Slide 33 text

3FWJFX $MPVE,JU w ιʔγϟϧܥαʔϏεʹ͸͋·Γ޲͍ͯͳ͍ʁ w σʔλΦϒδΣΫτͷ୅ସͰ͸ͳ͍ɺJ$MPVE4FSWFS΁ͷ σʔλసૹΛ؅ཧ͢ΔิࠤతͳαʔϏεΛఏڙ͢Δ w όοΫΞοϓػೳ͕ͳ͍ w ߏங͕؆୯͗͢Δ w ΫϦοΫ͚ͩͰ࣮૷͢Δ४උ͕Ͱ͖͕͋Δ w .BD049༻ͷΞϓϦΛ࡞੒͢Δ৔߹͸ผ్ܖ໿͕ɻɻɻ IUUQTEFWFMPQFSBQQMFDPNMJCSBSZQSFSFMFBTFNBDEPDVNFOUBUJPO$MPVE,JU3FGFSFODF$MPVE,JU@'SBNFXPSL@3FGFSFODFJOEFYIUNMBQQMF@SFGEPD VJE51

Slide 34

Slide 34 text

3FGFSFODF $MPVE,JU w $MPVE,JU'SBNFXPSL3FGFSFODF w IUUQTEFWFMPQFSBQQMFDPNMJCSBSZQSFSFMFBTFNBDEPDVNFOUBUJPO$MPVE,JU 3FGFSFODF$MPVE,JU@'SBNFXPSL@3FGFSFODFJOEFYIUNMBQQMF@SFGEPDVJE 51  w *OUSPEVDJOH$MPVE,JU w 4FTTJPO w IUUQTEFWFMPQFSBQQMFDPNWJEFPTXXED w "EWBODFE$MPVE,JU w 4FTTJPO w IUUQTEFWFMPQFSBQQMFDPNWJEFPTXXED

Slide 35

Slide 35 text

UIBOLT