2010-12-03 67 views
0

快速的問題。我的應用中有一個密碼系統,如果輸入了太多不正確的密碼,我想提供「鎖定」應用的選項。我可以輕鬆地做到這一點,通過設置一些默認密鑰的UISwitch,可以切換另一個可以鎖定應用的密鑰集。很抱歉,如果這是混亂的,但真正的問題我已經是,如果我這樣做:NSUserdefaults Persistance

// in the failure function 
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"appIsLocked"]; 

// in didFinishLaunching 
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"appIsLocked"]) 
{ 
    // launch normally 
} 

首先,如果用戶刪除應用程序,然後重新安裝它,比如從iTunes中,將userDefaults被重置?在中,應用程序是否會自動解鎖?其次,如果蘋果在鎖定的情況下退出應用程序,我感覺如何?那可能嗎?或者,如果我只顯示一個屏幕顯示它已被鎖定,請重新安裝。當用戶卸載可以運行清理的應用程序時,是否有一個函數會被調用?

非常感謝,如果問題太大,我很抱歉。

回答

1

據我所知,沒有辦法實際退出該應用程序。調用exit()會讓你通常被拒絕。蘋果在這裏特別這麼說:http://developer.apple.com/library/ios/#qa/qa2008/qa1561.html

所以我不會推薦這樣做,只是讓應用程序保持打開狀態並鎖定它。

另一方面,重新安裝應用程序將解鎖它,用戶默認將被刪除,如Antwan說的。

1

userdefaults位於應用程序包中,因此將被刪除。 我認爲當你退出時,顯示「你不允許使用這個應用」dailog時,蘋果會批准你的應用。 請記住,當iOS設備越獄時編輯用戶默認值非常容易,因此將其保存爲用戶默認值並不是保護它的好方法。

+0

嗯,我將密碼保存在鑰匙串中,我是否應該嘗試將鎖定標誌存儲在那裏? – Josh 2010-12-03 17:06:51

1

以編程方式退出應用程序並不是首選。您應該使用專門用於通知用戶他們被鎖定的視圖鎖定用戶。

此外,任何一個應用程序的用戶默認值都會在應用程序從設備中刪除時被刪除。持久鎖定的唯一方法是遠程存儲鎖定信息,例如在您的一臺服務器上(在這種情況下強烈考慮實用性)。

Protip:散列密碼,不要以明文存儲,並比較散列。

0

儘管由於用戶好像應用程序崩潰似乎非常不鼓勵,但您仍然可以使用函數exit();。我並沒有意識到這是令人沮喪的,而我使用它的方式是讓我的應用動畫化,以淡入黑屏,並在動畫完成後退出應用。這種方法似乎並沒有讓應用程序崩潰。

我目前在使用此功能的應用商店中有一個應用程序,因此您的應用程序可能會也可能不會被拒絕。如果您仍然想要使用下面的代碼段來解決退出應用程序的這種方法。

exit(0);