SlideShare uma empresa Scribd logo
1 de 39
Three20
Phillip Verheyden
Dallas Tech Fest

August 12, 2011
Who am I?

• Consultant for Credera
• ~12 months of iPhone experience
• Three20 contributor
Roadmap

• What is Three20 and why should I care?
• TTCatalog Demo
• PhotoGallery App demo
• Code!
• Closing thoughts
What is Three20?
• Framework of views, helpers, paradigms in
  Objective-C built on top of iOS
• Heavy focus on network access
• Brought to you by: Facebook™
• Takes out large amount iOS boilerplate
  code
Why Three20?
Features
•   Custom views like a launcher view (mimics Springboard)and a photo gallery
    controller

•   Asynchronous URL loading + robust disk cache

•   Customized table cells

•   Internet-aware table views

•   URL-based navigation

•   Global Styling
Extensions
• Built on top of Three20
• extThree20CSSStyle - use CSS to style
  your app
• extThree20JSON - shortcut for parsing
  JSON (uses SBJSON or YAJL)
• extThree20XML - rudimentary XML
  marshaling (uses NSXMLParser)
TTCatalog Demo
Our App
• Photo App
• Uses:
 • TTLauncherView
 • TTTableViewController
 • TTPhotoController
Server Code Layout

• 2 categories: ATVs, Sports
• Each gallery has an arbitrary number of
  albums (specified in XML)
• Each album has an arbitrary number of
  Photos (specified in XML)
TTLauncherView

• Comprised of TTLauncherItems
• Each item can contain a picture, title and
  open a view
• Mimics Springboard (except for folders)
TTModelViewController            TTTableViewDataSource                  TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)   TTURLRequestModel



MyTableViewController               MyDataSource                       MyModel
TTModelViewController            TTTableViewDataSource                  TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)   TTURLRequestModel



MyTableViewController               MyDataSource                       MyModel

     createModel
TTModelViewController             TTTableViewDataSource                 TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)   TTURLRequestModel



MyTableViewController               MyDataSource                       MyModel

     createModel           init
TTModelViewController             TTTableViewDataSource                 TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)   TTURLRequestModel



MyTableViewController               MyDataSource                       MyModel

     createModel           init                           init
TTModelViewController             TTTableViewDataSource                 TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)   TTURLRequestModel



MyTableViewController               MyDataSource                       MyModel

     createModel           init                           init



                                         load:more:
TTModelViewController             TTTableViewDataSource                  TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)    TTURLRequestModel



MyTableViewController               MyDataSource                        MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:
TTModelViewController             TTTableViewDataSource                   TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)    TTURLRequestModel



MyTableViewController               MyDataSource                         MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:                  load:more
TTModelViewController             TTTableViewDataSource                   TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)    TTURLRequestModel



MyTableViewController               MyDataSource                         MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:                  load:more
TTModelViewController             TTTableViewDataSource                    TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)    TTURLRequestModel



MyTableViewController               MyDataSource                          MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:                  load:more

                                                                     [request send]
TTModelViewController             TTTableViewDataSource                    TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)    TTURLRequestModel



MyTableViewController               MyDataSource                          MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:                  load:more

                                                                     [request send]
TTModelViewController             TTTableViewDataSource                    TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)    TTURLRequestModel



MyTableViewController               MyDataSource                          MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:                  load:more

                                                                     [request send]
                                                                                      WEB
TTModelViewController             TTTableViewDataSource                    TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)    TTURLRequestModel



MyTableViewController               MyDataSource                          MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:                  load:more

                                                                     [request send]
                                                                                      WEB
TTModelViewController             TTTableViewDataSource                     TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)     TTURLRequestModel



MyTableViewController               MyDataSource                           MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:                    load:more

                                                                      [request send]

                                                                     request:did(Finish,
                                                                                           WEB
                                                                         Fail)Load
TTModelViewController             TTTableViewDataSource                     TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)     TTURLRequestModel



MyTableViewController               MyDataSource                           MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:                    load:more

                                                                      [request send]

                                                                     request:did(Finish,
                                                                                           WEB
                                                                         Fail)Load
TTModelViewController             TTTableViewDataSource                        TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)       TTURLRequestModel



MyTableViewController               MyDataSource                             MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:                      load:more

                                                                        [request send]

                                                                      request:did(Finish,
                                                                                            WEB
                                                                          Fail)Load

                                                                     [super request:request
                                                                         did(Finish, Fail)Load]
TTModelViewController             TTTableViewDataSource                        TTModel




TTTableViewController   (TTListDataSource, TTSectionedDataSource)       TTURLRequestModel



MyTableViewController               MyDataSource                             MyModel

     createModel           init                               init

                                       add self as delegate
                                          load:more:                      load:more

                                                                        [request send]

                                                                      request:did(Finish,
                                                                                            WEB
                                                                          Fail)Load

                                                                     [super request:request
                                  modelDidFinishLoad:self                did(Finish, Fail)Load]
TTModelViewController                  TTTableViewDataSource                            TTModel




TTTableViewController      (TTListDataSource, TTSectionedDataSource)             TTURLRequestModel



MyTableViewController                        MyDataSource                             MyModel

     createModel               init                                    init

                                                add self as delegate
                                                   load:more:                      load:more

                                                                                 [request send]

                                                                               request:did(Finish,
                                                                                                     WEB
                                                                                   Fail)Load

                                                                              [super request:request
                                           modelDidFinishLoad:self                did(Finish, Fail)Load]



              tableViewDidLoadModel:self
TTModelViewController                  TTTableViewDataSource                                TTModel




TTTableViewController      (TTListDataSource, TTSectionedDataSource)                 TTURLRequestModel



MyTableViewController                        MyDataSource                                 MyModel

     createModel               init                                      init

                                                add self as delegate
                                                   load:more:                          load:more

                                                                                     [request send]

                                                                                   request:did(Finish,
                                                                                                         WEB
                                                                                       Fail)Load

                                                                                  [super request:request
                                           modelDidFinishLoad:self                    did(Finish, Fail)Load]


                                               tableViewDidLoadModel
              tableViewDidLoadModel:self        - create TTTableItems based on
                                                                  model results
TTModelViewController                   TTTableViewDataSource                               TTModel




TTTableViewController      (TTListDataSource, TTSectionedDataSource)                 TTURLRequestModel



MyTableViewController                        MyDataSource                                 MyModel

     createModel               init                                      init

                                                add self as delegate
                                                   load:more:                          load:more

                                                                                     [request send]

                                                                                   request:did(Finish,
                                                                                                         WEB
                                                                                       Fail)Load

                                                                                  [super request:request
                                           modelDidFinishLoad:self                    did(Finish, Fail)Load]


                                               tableViewDidLoadModel
              tableViewDidLoadModel:self        - create TTTableItems based on
                                                                  model results

               cellForRowAtIndexPath:
TTModelViewController                   TTTableViewDataSource                               TTModel




TTTableViewController      (TTListDataSource, TTSectionedDataSource)                 TTURLRequestModel



MyTableViewController                        MyDataSource                                 MyModel

     createModel               init                                      init

                                                add self as delegate
                                                   load:more:                          load:more

                                                                                     [request send]

                                                                                   request:did(Finish,
                                                                                                         WEB
                                                                                       Fail)Load

                                                                                  [super request:request
                                           modelDidFinishLoad:self                    did(Finish, Fail)Load]


                                               tableViewDidLoadModel
              tableViewDidLoadModel:self        - create TTTableItems based on
                                                                  model results
                                                  cellClassForObject:
               cellForRowAtIndexPath:               - provide TTTableCell from
                                                                  TTTableItem
TTModelViewController                   TTTableViewDataSource                               TTModel




TTTableViewController      (TTListDataSource, TTSectionedDataSource)                 TTURLRequestModel



MyTableViewController                        MyDataSource                                 MyModel

     createModel               init                                      init

                                                add self as delegate
                                                   load:more:                          load:more

                                                                                     [request send]

                                                                                   request:did(Finish,
                                                                                                         WEB
                                                                                       Fail)Load
                                                 notify delegates
                                                                                  [super request:request
                                           modelDidFinishLoad:self                    did(Finish, Fail)Load]


                                               tableViewDidLoadModel
              tableViewDidLoadModel:self        - create TTTableItems based on
                                                                  model results
                                                  cellClassForObject:
               cellForRowAtIndexPath:               - provide TTTableCell from
                                                                  TTTableItem
TTModelViewController                   TTTableViewDataSource                               TTModel




TTTableViewController      (TTListDataSource, TTSectionedDataSource)                 TTURLRequestModel



MyTableViewController                        MyDataSource                                 MyModel

     createModel               init                                      init

                                                add self as delegate
                                                   load:more:                          load:more

                                                                                     [request send]

                                                                                   request:did(Finish,
                                                                                                          WEB
                                                                                       Fail)Load
                                                 notify delegates
                                                                                  [super request:request
                                           modelDidFinishLoad:self                    did(Finish, Fail)Load]


                                               tableViewDidLoadModel
              tableViewDidLoadModel:self        - create TTTableItems based on
                                                                  model results
                                                  cellClassForObject:                      * - bold and underlined
               cellForRowAtIndexPath:               - provide TTTableCell from               notates methods to
                                                                  TTTableItem                     overwrite
Conform
to protocol
To the code!
Where to go from
        here?

• Nimbus - https://github.com/jverkoey/
  nimbus
• Restkit - https://github.com/RestKit/RestKit
Closing Thoughts
• Phillip Verheyden
• @phillipuniverse
• http://www.phillipuniverse.com
• http://github.com/phillipuniverse
• pverheyden@credera.com,
  pverheyden@gmail.com
• http://blogs.credera.com

Mais conteúdo relacionado

Semelhante a Leveraging the Three20 Framework for iPhone applications

Three20 by Gustavo Ambrozio - 3º iphonedevbr
Three20 by Gustavo Ambrozio - 3º iphonedevbrThree20 by Gustavo Ambrozio - 3º iphonedevbr
Three20 by Gustavo Ambrozio - 3º iphonedevbriPhoneDevBr
 
Functionnal view modelling
Functionnal view modelling Functionnal view modelling
Functionnal view modelling Hugo Saynac
 
Meteor + Ionic Introduction
Meteor + Ionic IntroductionMeteor + Ionic Introduction
Meteor + Ionic IntroductionLearningTech
 
Sitecore MVC (London User Group, April 29th 2014)
Sitecore MVC (London User Group, April 29th 2014)Sitecore MVC (London User Group, April 29th 2014)
Sitecore MVC (London User Group, April 29th 2014)Ruud van Falier
 
Wicket KT part 2
Wicket KT part 2Wicket KT part 2
Wicket KT part 2stuq
 
303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Code303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Codejonmarimba
 
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...SharePoint Saturday NY
 
Knockoutjs databinding
Knockoutjs databindingKnockoutjs databinding
Knockoutjs databindingBoulos Dib
 
10 tips for a reusable architecture
10 tips for a reusable architecture10 tips for a reusable architecture
10 tips for a reusable architectureJorge Ortiz
 
WaveEngine 3D components
WaveEngine 3D componentsWaveEngine 3D components
WaveEngine 3D componentswaveengineteam
 
Mobile Software Engineering Crash Course - C06 WindowsPhone
Mobile Software Engineering Crash Course - C06 WindowsPhoneMobile Software Engineering Crash Course - C06 WindowsPhone
Mobile Software Engineering Crash Course - C06 WindowsPhoneMohammad Shaker
 
The Magic of WPF & MVVM
The Magic of WPF & MVVMThe Magic of WPF & MVVM
The Magic of WPF & MVVMAbhishek Sur
 
Disconnected data
Disconnected dataDisconnected data
Disconnected dataaspnet123
 
Asp.net mvc training
Asp.net mvc trainingAsp.net mvc training
Asp.net mvc trainingicubesystem
 
Re-architecting the designer-developer workflow
Re-architecting the designer-developer workflowRe-architecting the designer-developer workflow
Re-architecting the designer-developer workflowRichard Lord
 
Sencha Touch meets TYPO3
Sencha Touch meets TYPO3Sencha Touch meets TYPO3
Sencha Touch meets TYPO3Nils Dehl
 
TwitterKitではじめる OAuthスピードクッキング
TwitterKitではじめる OAuthスピードクッキングTwitterKitではじめる OAuthスピードクッキング
TwitterKitではじめる OAuthスピードクッキングTakashi Nojima
 

Semelhante a Leveraging the Three20 Framework for iPhone applications (20)

Three20 by Gustavo Ambrozio - 3º iphonedevbr
Three20 by Gustavo Ambrozio - 3º iphonedevbrThree20 by Gustavo Ambrozio - 3º iphonedevbr
Three20 by Gustavo Ambrozio - 3º iphonedevbr
 
Functionnal view modelling
Functionnal view modelling Functionnal view modelling
Functionnal view modelling
 
Meteor + Ionic Introduction
Meteor + Ionic IntroductionMeteor + Ionic Introduction
Meteor + Ionic Introduction
 
Three20
Three20Three20
Three20
 
Sitecore MVC (London User Group, April 29th 2014)
Sitecore MVC (London User Group, April 29th 2014)Sitecore MVC (London User Group, April 29th 2014)
Sitecore MVC (London User Group, April 29th 2014)
 
Meteor
MeteorMeteor
Meteor
 
Wicket KT part 2
Wicket KT part 2Wicket KT part 2
Wicket KT part 2
 
303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Code303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Code
 
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
Lyudmila Zharova: Developing Solutions for SharePoint 2010 Using the Client O...
 
Knockoutjs databinding
Knockoutjs databindingKnockoutjs databinding
Knockoutjs databinding
 
10 tips for a reusable architecture
10 tips for a reusable architecture10 tips for a reusable architecture
10 tips for a reusable architecture
 
WaveEngine 3D components
WaveEngine 3D componentsWaveEngine 3D components
WaveEngine 3D components
 
Mobile Software Engineering Crash Course - C06 WindowsPhone
Mobile Software Engineering Crash Course - C06 WindowsPhoneMobile Software Engineering Crash Course - C06 WindowsPhone
Mobile Software Engineering Crash Course - C06 WindowsPhone
 
The Magic of WPF & MVVM
The Magic of WPF & MVVMThe Magic of WPF & MVVM
The Magic of WPF & MVVM
 
Disconnected data
Disconnected dataDisconnected data
Disconnected data
 
Asp.net mvc training
Asp.net mvc trainingAsp.net mvc training
Asp.net mvc training
 
Sql server-function
Sql server-functionSql server-function
Sql server-function
 
Re-architecting the designer-developer workflow
Re-architecting the designer-developer workflowRe-architecting the designer-developer workflow
Re-architecting the designer-developer workflow
 
Sencha Touch meets TYPO3
Sencha Touch meets TYPO3Sencha Touch meets TYPO3
Sencha Touch meets TYPO3
 
TwitterKitではじめる OAuthスピードクッキング
TwitterKitではじめる OAuthスピードクッキングTwitterKitではじめる OAuthスピードクッキング
TwitterKitではじめる OAuthスピードクッキング
 

Último

Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 

Último (20)

Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 

Leveraging the Three20 Framework for iPhone applications

  • 2. Who am I? • Consultant for Credera • ~12 months of iPhone experience • Three20 contributor
  • 3.
  • 4. Roadmap • What is Three20 and why should I care? • TTCatalog Demo • PhotoGallery App demo • Code! • Closing thoughts
  • 5. What is Three20? • Framework of views, helpers, paradigms in Objective-C built on top of iOS • Heavy focus on network access • Brought to you by: Facebook™ • Takes out large amount iOS boilerplate code
  • 7. Features • Custom views like a launcher view (mimics Springboard)and a photo gallery controller • Asynchronous URL loading + robust disk cache • Customized table cells • Internet-aware table views • URL-based navigation • Global Styling
  • 8. Extensions • Built on top of Three20 • extThree20CSSStyle - use CSS to style your app • extThree20JSON - shortcut for parsing JSON (uses SBJSON or YAJL) • extThree20XML - rudimentary XML marshaling (uses NSXMLParser)
  • 10. Our App • Photo App • Uses: • TTLauncherView • TTTableViewController • TTPhotoController
  • 11. Server Code Layout • 2 categories: ATVs, Sports • Each gallery has an arbitrary number of albums (specified in XML) • Each album has an arbitrary number of Photos (specified in XML)
  • 12. TTLauncherView • Comprised of TTLauncherItems • Each item can contain a picture, title and open a view • Mimics Springboard (except for folders)
  • 13. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel
  • 14. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel
  • 15. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init
  • 16. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init
  • 17. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init load:more:
  • 18. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more:
  • 19. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more
  • 20. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more
  • 21. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send]
  • 22. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send]
  • 23. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] WEB
  • 24. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] WEB
  • 25. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] request:did(Finish, WEB Fail)Load
  • 26. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] request:did(Finish, WEB Fail)Load
  • 27. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] request:did(Finish, WEB Fail)Load [super request:request did(Finish, Fail)Load]
  • 28. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] request:did(Finish, WEB Fail)Load [super request:request modelDidFinishLoad:self did(Finish, Fail)Load]
  • 29. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] request:did(Finish, WEB Fail)Load [super request:request modelDidFinishLoad:self did(Finish, Fail)Load] tableViewDidLoadModel:self
  • 30. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] request:did(Finish, WEB Fail)Load [super request:request modelDidFinishLoad:self did(Finish, Fail)Load] tableViewDidLoadModel tableViewDidLoadModel:self - create TTTableItems based on model results
  • 31. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] request:did(Finish, WEB Fail)Load [super request:request modelDidFinishLoad:self did(Finish, Fail)Load] tableViewDidLoadModel tableViewDidLoadModel:self - create TTTableItems based on model results cellForRowAtIndexPath:
  • 32. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] request:did(Finish, WEB Fail)Load [super request:request modelDidFinishLoad:self did(Finish, Fail)Load] tableViewDidLoadModel tableViewDidLoadModel:self - create TTTableItems based on model results cellClassForObject: cellForRowAtIndexPath: - provide TTTableCell from TTTableItem
  • 33. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] request:did(Finish, WEB Fail)Load notify delegates [super request:request modelDidFinishLoad:self did(Finish, Fail)Load] tableViewDidLoadModel tableViewDidLoadModel:self - create TTTableItems based on model results cellClassForObject: cellForRowAtIndexPath: - provide TTTableCell from TTTableItem
  • 34. TTModelViewController TTTableViewDataSource TTModel TTTableViewController (TTListDataSource, TTSectionedDataSource) TTURLRequestModel MyTableViewController MyDataSource MyModel createModel init init add self as delegate load:more: load:more [request send] request:did(Finish, WEB Fail)Load notify delegates [super request:request modelDidFinishLoad:self did(Finish, Fail)Load] tableViewDidLoadModel tableViewDidLoadModel:self - create TTTableItems based on model results cellClassForObject: * - bold and underlined cellForRowAtIndexPath: - provide TTTableCell from notates methods to TTTableItem overwrite
  • 37. Where to go from here? • Nimbus - https://github.com/jverkoey/ nimbus • Restkit - https://github.com/RestKit/RestKit
  • 38.
  • 39. Closing Thoughts • Phillip Verheyden • @phillipuniverse • http://www.phillipuniverse.com • http://github.com/phillipuniverse • pverheyden@credera.com, pverheyden@gmail.com • http://blogs.credera.com

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n