登錄注冊(cè)(MVVM+ReactiveCocoa)

登錄注冊(cè)邏輯梳理

  • 登錄主要就是考慮幾個(gè)UI控件的聯(lián)動(dòng)反應(yīng)尾组,至于如何船體聯(lián)動(dòng)信息,不就是靠RAC來(lái)處理么示弓,首先說(shuō)一下所有的UI空間包括讳侨,用戶名輸入框、密碼輸入框奏属、登錄按鈕跨跨。

  • 登錄界面最核心的元素就三個(gè),如何處理三個(gè)UI元素的聯(lián)動(dòng)就是RAC信號(hào)需要考慮的囱皿。

  • 聯(lián)動(dòng)反應(yīng)總共包括:

    • 用戶名輸入框的輸入內(nèi)容每輸入一個(gè)字符就判斷一次歹叮,判斷的標(biāo)準(zhǔn)包括字符最低數(shù)量和字符最高數(shù)量、首位字符是否是1铆帽。如果首位字符不是1,那么立馬提示用戶德谅,請(qǐng)輸入電話號(hào)碼爹橱,或者說(shuō)根本第一個(gè)數(shù)字就只能輸入1,其它的數(shù)字都輸入不了窄做,接下來(lái)愧驱,在輸入第2位數(shù)字到第10位數(shù)字的時(shí)候發(fā)送的信后都過(guò)濾掉,不發(fā)送椭盏,一旦輸入第11位字符组砚,立馬假設(shè)用戶輸入的就是電話號(hào)碼,開(kāi)始進(jìn)入RACmap遍歷掏颊,驗(yàn)證輸入的這11個(gè)字符是否是一個(gè)合法的電話號(hào)碼糟红。

    • 如果合法返回YES信號(hào),如果不合法返回NO信號(hào),那么都有誰(shuí)訂閱這個(gè)用戶名輸入框的信號(hào)呢乌叶,自然首先就是輸入框的背景顏色屬性與這個(gè)用戶名輸入框的信號(hào)做了綁定盆偿,一旦返回YES信號(hào),立馬通過(guò)三目運(yùn)算符改變用戶名輸入框的顏色准浴,表示用戶名輸入的電話號(hào)碼是合法有效的事扭,同時(shí)將密碼輸入框作為鍵盤(pán)的第一響應(yīng)者,這樣就不用用戶手動(dòng)撤銷(xiāo)鍵盤(pán)乐横,然后在點(diǎn)擊密碼輸入框重新開(kāi)啟這個(gè)鍵盤(pán)了求橄,大大優(yōu)化用戶體驗(yàn)今野。如果在控制器直接就map遍歷用戶名輸入框的信號(hào),這樣確實(shí)很簡(jiǎn)單罐农,但是条霜,這就沒(méi)有體現(xiàn)出使用MVVM最大化程度上優(yōu)化控制器的目的。

    • 限定用戶名輸入框最高輸入11位數(shù)啃匿,含很簡(jiǎn)單蛔外,一旦超過(guò)11位數(shù),立馬就不允許輸入溯乒,獲取說(shuō)輸入后置是顯示前11位數(shù)夹厌,后面的自動(dòng)刪除。

StoryBoard

  • 為了不破壞StoryBoard的完整性裆悄,決定按鈕點(diǎn)擊后立馬跳轉(zhuǎn)控制器矛纹,但是驗(yàn)證碼輸入是否正確將沒(méi)法判斷,最好的解決方案就是想搜索那樣光稼,只要輸入了6個(gè)數(shù)字或南,就進(jìn)行驗(yàn)證碼的校正請(qǐng)求。

  • storyBoard跳轉(zhuǎn)之前執(zhí)行判斷艾君,判斷是否驗(yàn)證碼合乎身份采够,如果合法,繼續(xù)跳轉(zhuǎn)冰垄,如果不合法蹬癌,就停止跳轉(zhuǎn),問(wèn)題是不論驗(yàn)證碼合不合法虹茶,怎么都條控制器呀逝薪,這就不科學(xué)了,盡管即將跳轉(zhuǎn)時(shí)蝴罪,可以給控制器傳遞點(diǎn)數(shù)據(jù)董济,但是,依然不能解決跳轉(zhuǎn)中止要门。

  • 當(dāng)我用代碼校驗(yàn)驗(yàn)證碼成功跳轉(zhuǎn)LoginStoryBoard的控制器虏肾,出現(xiàn)的問(wèn)題是,居然控制器上什么也沒(méi)有暂衡,這是什么鬼询微?難道我創(chuàng)建了一個(gè)新的控制器么,這可咋整狂巢,一定是的撑毛,不然怎么會(huì)什么也沒(méi)有?對(duì)比了,以為是沒(méi)有在使用StoryBoardID前打上勾藻雌,但是發(fā)現(xiàn)雌续,打上勾依然沒(méi)用。

  • 原本以為是沒(méi)有創(chuàng)造了新的控制器胯杭,但是我看控制器的背景View驯杜,又真的是一點(diǎn)疑問(wèn)也沒(méi)有,只是輸入框這些玩意兒不知道去哪里了做个,簡(jiǎn)直了鸽心,問(wèn)題出在哪里呢坞琴?什么線索燕锥。原來(lái)是ID重復(fù)了,換了一個(gè)獨(dú)一無(wú)二的ID就什么問(wèn)題沒(méi)有了圆兵。

請(qǐng)求頭的意義太闺?

  • 傳入UserId是因?yàn)榉?wù)器想要知道這個(gè)請(qǐng)求是誰(shuí)發(fā)的

  • 傳入Token是想判斷當(dāng)前UserID用戶是否有資格來(lái)發(fā)送這個(gè)請(qǐng)求

  • 傳入設(shè)備的唯一ID是為了通知推送

  • 密碼必須MD5加密糯景,否則反饋參數(shù)錯(cuò)誤

猿題庫(kù)網(wǎng)絡(luò)請(qǐng)求設(shè)置BaseUrl無(wú)效?

  • 無(wú)論BaseUrl最后有沒(méi)有/字符省骂,三方庫(kù)都會(huì)構(gòu)造一個(gè)/字符蟀淮,所以detailUrl的前面一定不能有/字符.

  • 三方庫(kù)沒(méi)有對(duì)DetailUrl的首字符/判斷,只要出現(xiàn)兩個(gè)//字符钞澳,直接就忽略了后面的detailUrl

登錄

  • 判斷登錄狀態(tài)怠惶。在BaseViewModel里面聲明并實(shí)現(xiàn)judgeWhetherLogin判斷用戶是否已經(jīng)登錄的方法,本質(zhì)通過(guò)[UserManager currentUser]全局用戶管理類(lèi)的isLogin屬性來(lái)判斷轧粟。往往真相就是這么簡(jiǎn)單甚疟,用戶是否登錄這個(gè)信息竟然是以BOOL屬性值的形式存儲(chǔ)在[UserManager currentUser],因?yàn)?code>[UserManager currentUser]全局單例類(lèi)模型對(duì)象存儲(chǔ)于沙盒之中逃延,這樣即使APP退出后依然記錄該用戶的登錄狀態(tài)。

  • 跳轉(zhuǎn)登陸控制器轧拄。BaseViewModel里實(shí)例化LoginViewModel繼而跳轉(zhuǎn)到LoginViewController之中揽祥,把judgeWhetherLogin方法寫(xiě)在BaseViewModel里面帶來(lái)的好處可見(jiàn)一斑。

  • 判斷用戶是否登錄和跳轉(zhuǎn)到登錄控制器是綁定到一起的檩电,問(wèn)題在于跳轉(zhuǎn)控制器是需要導(dǎo)航控制器和目標(biāo)控制器的拄丰,如果說(shuō)目標(biāo)控制器可以通過(guò)類(lèi)名字符串轉(zhuǎn)類(lèi)Class來(lái)實(shí)現(xiàn),那么持有導(dǎo)航控制器的類(lèi)則成了綁定登錄控制器跳轉(zhuǎn)的最好選擇俐末,在MVVM結(jié)構(gòu)之中料按,控制器ViewControllerViewModel都可以實(shí)現(xiàn)控制器的跳轉(zhuǎn),但是ViewModel持有的BaseNav是經(jīng)過(guò)加工的導(dǎo)航控制器卓箫,因此可以給控制器的跳轉(zhuǎn)封裝一些自定義的內(nèi)容载矿,比如說(shuō)可以把目標(biāo)普通控制器的構(gòu)造代碼統(tǒng)一封裝到我們加工過(guò)的BaseNav里面,如此一來(lái)烹卒,就可以通過(guò)傳入目標(biāo)控制器的類(lèi)的字符串名稱(chēng)來(lái)構(gòu)建目標(biāo)控制器了闷盔。

  • 還有弯洗,既然決定了通過(guò)BaseViewModel操作BsaeNav屬性來(lái)跳轉(zhuǎn)控制器,那么把登錄控制器的跳轉(zhuǎn)寫(xiě)到BaseViewModel里面逢勾,如此輕松實(shí)現(xiàn)BaseViewModel的所有子類(lèi)直接調(diào)用父類(lèi)的方法跳轉(zhuǎn)登錄控制器牡整。

  • 既然跳轉(zhuǎn)登錄控制器通常和判斷登錄狀態(tài)始終綁定到了一起,干脆把這兩個(gè)方法封裝成一個(gè)方法judgeWhetherLogin聲明并是實(shí)現(xiàn)在BaseViewModel里溺拱。如此一來(lái)逃贝,BaseViewModel的所有子類(lèi)都可以調(diào)用父類(lèi)判斷用戶是否登錄的方法,同時(shí)跳轉(zhuǎn)到登錄控制器的也不用寫(xiě)了迫摔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沐扳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子攒菠,更是在濱河造成了極大的恐慌迫皱,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辖众,死亡現(xiàn)場(chǎng)離奇詭異卓起,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)凹炸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)戏阅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人啤它,你說(shuō)我怎么就攤上這事奕筐。” “怎么了变骡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵离赫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我塌碌,道長(zhǎng)渊胸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任台妆,我火速辦了婚禮翎猛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘接剩。我一直安慰自己切厘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布懊缺。 她就那樣靜靜地躺著疫稿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上而克,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天靶壮,我揣著相機(jī)與錄音,去河邊找鬼员萍。 笑死腾降,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碎绎。 我是一名探鬼主播螃壤,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼筋帖!你這毒婦竟也來(lái)了奸晴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤日麸,失蹤者是張志新(化名)和其女友劉穎寄啼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體代箭,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡墩划,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗡综。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乙帮。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖极景,靈堂內(nèi)的尸體忽然破棺而出察净,到底是詐尸還是另有隱情,我是刑警寧澤盼樟,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布氢卡,位于F島的核電站,受9級(jí)特大地震影響晨缴,放射性物質(zhì)發(fā)生泄漏异吻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一喜庞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棋返,春花似錦延都、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春殊者,著一層夾襖步出監(jiān)牢的瞬間与境,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工猖吴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摔刁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓海蔽,卻偏偏與公主長(zhǎng)得像共屈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子党窜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言豁护,發(fā)作 oo-boon-too 的音哼凯。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 99,367評(píng)論 9 467
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,321評(píng)論 25 707
  • 2017.02.22 可以練習(xí),每當(dāng)這個(gè)時(shí)候择镇,腦袋就犯困挡逼,我這腦袋真是神奇呀,一說(shuō)讓你做事情腻豌,你就犯困家坎,你可不要太...
    Carden閱讀 1,349評(píng)論 0 1
  • 運(yùn)動(dòng)這事,想起來(lái)動(dòng)一下簡(jiǎn)單吝梅,要自己天天運(yùn)動(dòng)有點(diǎn)困難虱疏,人是一種奇怪的物種,當(dāng)一件事讓你看不到效果就想放棄苏携,我們只喜歡...
    hotu閱讀 170評(píng)論 0 0
  • 這世上總有那么幾件事 幾個(gè)人 是能讓你一下子沒(méi)了性子的 喜歡你無(wú)理取鬧 一言不合就注銷(xiāo)的樣子 沒(méi)事 你鬧吧 反正我...
    打好boss好睡覺(jué)閱讀 140評(píng)論 0 0