Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
MVC-N Discussion
Search
Marcus S. Zarra
March 10, 2016
Technology
8
47k
MVC-N Discussion
A discussion about proper networking in your iOS based application
Marcus S. Zarra
March 10, 2016
Tweet
Share
Other Decks in Technology
See All in Technology
Azure SQL Databaseでベクター検索を活用しよう
nakasho
0
130
AI開発をスケールさせるデータ中心の仕組みづくり
kzykmyzw
0
190
Mosaic AI Gatewayでコーディングエージェントを配るための運用Tips / JEDAI 2026 新春 Meetup! AIコーディング特集
genda
0
130
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
41k
AI時代、1年目エンジニアの悩み
jin4
1
130
人はいかにして 確率的な挙動を 受け入れていくのか
vaaaaanquish
5
3.2k
日本語テキストと音楽の対照学習の技術とその応用
lycorptech_jp
PRO
1
370
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
1
170
Tebiki Engineering Team Deck
tebiki
0
23k
今日から始めるAmazon Bedrock AgentCore
har1101
4
200
BiDiってなんだ?
tomorrowkey
2
510
EventBridge API Destination × AgentCore Runtimeで実現するLambdaレスなイベント駆動エージェント
har1101
7
280
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
110
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
130
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
320
How to build a perfect <img>
jonoalderson
1
4.9k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
99
Context Engineering - Making Every Token Count
addyosmani
9
640
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
44
Designing Powerful Visuals for Engaging Learning
tmiket
0
210
Balancing Empowerment & Direction
lara
5
860
First, design no harm
axbom
PRO
2
1.1k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
59
42k
Transcript
Marcus S. Zarra MVC-N
MyUIViewController Network Request Network Request OtherUIViewController Network Request Network Request
ThirdUIViewController Network Request Network Request Controller Layer FourthUIViewController Network Request Network Request Core Data Anti-Pattern
MVCN Network Controller
MVCN MyUIViewController OtherUIViewController ThirdUIViewController FourthUIViewController NetworkController NR NR NR NR
NR NR Core Data The Net
NetworkController NR NR NR NR NR NR Network Controller Dependency
Injection Singleton AppDelegate property class NetworkController: NSObject { } let queue = NSOperationQueue() var mainContext: NSManagedObjectContext? func requestMyData() func requestMyData() -> NSFetchedResultsController func requestMyData(completion: (Void) -> Bool)
NetworkController NR NR NR NR NR NR Network Controller class
MyNetworkRequest: NSOperation { var context: NSManagedObjectContext? init(myParam1: String, myParam2: String) }
class MyNetworkRequest: NSOperation { var context: NSManagedObjectContext? private var innerContext:
NSManagedObjectContext? private var task: NSURLSessionTask? private let incomingData = NSMutableData() init(myParam1: String, myParam2: String) { super.init() //set some parameters here } var internalFinished: Bool = false override var finished: Bool { get { return internalFinished } set (newAnswer) { willChangeValueForKey("isFinished") internalFinished = newAnswer didChangeValueForKey("isFinished") } } }
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition)
-> Void) { if cancelled { finished = true sessionTask?.cancel() return } //Check the response code and react appropriately completionHandler(.Allow) } func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) { if cancelled { finished = true sessionTask?.cancel() return } incomingData.appendData(data) }
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) { if
cancelled { finished = true sessionTask?.cancel() return } if error != nil { self.error = error log("Failed to receive response: \(error)") finished = true return } //PROCESS DATA INTO CORE DATA finished = true }
Unit Testing
Network Conditions • Operations can report speeds • Control Performance
via the Queue • Network Controller can react to conditions • Central location for canceling of actions • Single decision point for background processing
Wrap up • Own your network code • Don’t put
network code in view controllers • Keep all network code together • All UI should feed from Core Data • Disconnect data collection and data display
Marcus S. Zarra
[email protected]
http://www.cimgf.com Thank You