2014-03-24 132 views
0

我正在開發一個應用程序,從我校網站的tableview中獲取數據,但要做到這一點,該應用程序需要先登錄。類返回等待的UIWebView

我一直在嘗試了幾個小時做一個正確的登錄系統通過發送數據作爲POST到登錄表單,但由於某種原因,它不會工作(我之前做過的另一個網站,所以它不是因爲我不知道如何)

所以現在我只是有一個隱藏的uiwebview與登錄形式和填充與用戶添加到兩個uitextfields ..

但不是將隱藏的uiwebview添加到每視圖 - 控制(每當我需要重新登錄才能獲取數據,在網站上的會話過期的情況下),我真的想只是做一個類來做到這一點..

我在想是這樣的:

class.h

+(BOOL)loginWithUsername(NSString*)username : password(NSString*)password; 

class.m

+(BOOL)loginWithUsername(NSString*)username : password(NSString*)password { 
//create webview 
//populate form on site 
// press submitbutton 
//wait for - (void)webViewDidFinishLoad:(UIWebView *)webView to finish, where it analyzes if the user was logged in, and if so return true 
} 

但是怎麼會變成這樣做?

+0

貴的學校服務器提供登錄Web服務,而不是一種形式? – Tander

+1

而不是等待,這可能有不良的用戶界面行爲,你可以讓你的登錄發佈成功後的通知,並讓你的控制器在顯示新數據之前監聽它? ...或將完成塊傳遞給登錄例程? –

+0

菲利普斯聽起來plossible,我會嘗試, – magnuskahr

回答

0

更好的是完成塊的創建方法

的typedef塊,是沒有必要的,但真正有用的

typedef void(^CompletionHandler)(BOOL success); 

在這個方法中完成處理程序保存到本地伊娃像CompletionHandler _handler;

+(BOOL)loginWithUsername(NSString*)username : password(NSString*)password complete:(CompletionHandler)handler; 

in webViewDidFinishLoad檢查登錄成功結束cal block與

if (handler) 
{ 
     handler(YES); // or no if login failed 
} 

和花葯控制器,你可以調用這個像

[LoginClass loginWithUsername:@"user" password:@"pass" complete:^(bool success){ 
    if (success) 
    { 
     // logged in 
    } 
}]; 
+0

謝謝,我會嘗試, – magnuskahr

+0

Okayso,我已經tryed: ServiceHandler.h ' #進口<基金會/ Foundation.h> 無效的typedef(^ CompletionHandler)(BOOL成功) ; (NSString *)用戶名密碼:(NSString *)密碼完成:(CompletionHandler)處理程序;(NSString *)處理程序; @end ' ServiceHandler.m:http://pastebin.com/jPAaF9mb 但它失敗:http://i.imgur.com/pI6SSu3。PNG @ sage444 – magnuskahr

+1

哦,對不起,請添加型成功之前,我更新了答案 – sage444