2014-03-31 41 views
0

我正在檢查重複的用戶名方法。基本上,在註冊過程中將使用此方法來檢查重複的用戶名。我從我的URL中獲得了所有充滿用戶名的JSON。最主要的是我的方法似乎沒有工作。匹配JSON用戶名和UITextField

這裏是我的代碼

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// DIOSSession *session = [DIOSSession sharedSession]; 
// [session user]; 
// [[DIOSSession sharedSession] user]; 
    [self makeRequestJSON]; 


[self.txtPasswordRegister addTarget:self action:@selector(checkTextField:) forControlEvents:UIControlEventEditingChanged]; 
[self.txtPaasswordRegisterReEnter addTarget:self action:@selector(checkTextField:) forControlEvents:UIControlEventEditingChanged]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(void)makeRequestJSON 
{ 
    NSURL *url = [NSURL URLWithString:@"http://localhost/drupal/rest/user.json"]; 

NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

AFJSONRequestOperation *operation = [AFJSONRequestOperation 
            JSONRequestOperationWithRequest:request 
            success:^(NSURLRequest *request, NSHTTPURLResponse *response, id responseObject) 
            { 

             _myJson = responseObject; 


            } 
            failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id responseObject) 
            { 
             NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo); 
            }]; 

[operation start]; 

} 

- (IBAction)ChkUsername:(id)sender { 

    [self makeRequestJSON]; 
    NSString *match = [_myJson valueForKey:@"name"]; 

    NSLog(@"match is %@", match); 
    if([self.txtUsernameRegister.text isEqualToString: match]){ 
     [self alertStatus:@"Duplicate Username" :@"Pick another Username" :0]; 
    }else { 
     [self alertStatus:@"You can use this username" :@"Yeahhh" :0]; 
    } 

} 

這裏是我的JSON,我從NSLog的了。

pae1344, 
    pae12, 
    pae13, 
    mai, 
    kbank1, 
    kbank, 
    fuji1, 
    fuji, 
    admin, 
    "" 
+1

你需要存儲所有josn響應數組,然後匹配您當前的文本域價值與陣列的每個對象...但作爲我個人的經驗,它更好地傳遞用戶名到服務器和服務器將返回該用戶名是否存在或不? – Apple

回答

0

[self makeRequestJSON];是一種調用異步操作的方法。所以,_myJson不會立即更新,這將需要一些時間。

因此,在撥打makeRequestJSON後立即嘗試使用_myJson將不起作用。

因爲您在viewDidLoad中調用它,所以在嘗試使用它之前可能有一個值,或者您可能沒有。你需要決定如何處理。

您顯示的JSON顯然不是JSON,但它看起來不是字典,所以調用[_myJson valueForKey:@"name"];可能會崩潰,並且幾乎肯定不會返回單個字符串。相反,它似乎是一個字符串數組,你應該做的是這樣的:

if([_myJson containsObject:self.txtUsernameRegister.text]){ 
    [self alertStatus:@"Duplicate Username" :@"Pick another Username" :0]; 
} else { 
    [self alertStatus:@"You can use this username" :@"Yeahhh" :0]; 
} 

(注意,此代碼查找精確匹配,你可能不想考慮市值/變音符號/ .. )

理想情況下,您將從用戶處獲得用戶名,然後調用Web服務,發送用戶選擇並獲取指示其是否有效的布爾值。你目前的解決方案返回所有用戶名是一個(更大的)安全問題,並不會像你有用戶的數量上升...