SlideShare una empresa de 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

Más contenido relacionado

Similar 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
 

Similar 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

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

Último (20)

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

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 del 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