2014-04-18 7 views
0

입력이 "NULL"이 아닌 한 NSMutableArray에서 채워지는 UIPicker보기가 있습니다.선택에 따라 UIPickerView에서 항목을 삭제할 수 없습니다

그래서 내 선택기는 NULL을 제외한 모든 값을 표시합니다.

이제 UITextField 상자와 버튼이 있습니다. 그래서 텍스트 필드에 무엇을 입력하든 버튼을 클릭하면 NSMutableArray (UIPickerView를 채우는 데 사용 된)에있는 것과 일치하는 항목이 있으면 NULL로 설정하고 UIPicker를 새로 고침하여 변경하지 않습니다. 더 이상 표시되지 않습니다.

어떤 이유로 NSM을 사용하여 확인한 값을 NULL로 설정할 수 있지만 선택기가 업데이트를 가져 오지 않으며 NSMutable 배열도 수행하지 않습니다.

-(void) loadthepicker 
{ 

    NSMutableArray *getarray = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"FilerNamesArray"]]; 


    pickerLoaderArray=[[NSMutableArray alloc] init]; 



    for (int j=0; j<20; j++) { 



     if ([[getarray objectAtIndex:j] isEqualToString:@"NULL"]) 
     { 
      // do nothing..don't load 


     } 
     else // add that filter to pickerLoaderArray 
     { 

      [pickerLoaderArray addObject:[getarray objectAtIndex:j]]; 



     } 



    } // end of for 




    [pickerView reloadAllComponents]; 

    [pickerView selectRow:0 inComponent:0 animated:NO]; 

} 

-(NSInteger)numberOfComponentsInPickerView:(NSInteger)component 
{ 
    return 1; 
} 

-(NSInteger)pickerView:(UIPickerView *)picker numberOfRowsInComponent:(NSInteger)component 
{ 

    return [pickerLoaderArray count]; 

} 

-(NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 

    return [pickerLoaderArray objectAtIndex:row]; 
    } 

버튼 : 난 당신이 뭘 하려는지받을 경우

- (IBAction)deleteButton:(id)sender { 

    NSUserDefaults *CheckFiltersUsed = [NSUserDefaults standardUserDefaults]; 
    NSInteger myInt = [CheckFiltersUsed integerForKey:@"FiltersUsed"]; 

    if (myInt<=20 && myInt>0) { 


     NSLog(@"number of filters used before deleting %ld",(long)myInt); 
     [CheckFiltersUsed setInteger:myInt-1 forKey:@"FiltersUsed"]; 
     [CheckFiltersUsed synchronize]; 

     // get names array 
     NSMutableArray *getarray = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"FilerNamesArray"]]; 
     NSArray *get=getarray; 


     // at location where name matches with selectedfilter..put NULL 
     for (int j=0; j<20; j++) { 

      if ( [[getarray objectAtIndex:j] isEqualToString:_filterToDelete.text] && isFilterDeleted==NO) 
      { 

       NSLog(@"------currently %d is %@",j,[getarray objectAtIndex:j]); 
       [getarray insertObject:@"NULL" atIndex:j]; 
       NSLog(@"------now %d is %@",j,[getarray objectAtIndex:j]); 

       UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"" message: @"Deleted" delegate: nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; 

       isFilterDeleted=YES; 

       [[NSUserDefaults standardUserDefaults] setObject:getarray forKey:@"FilerNamesArray"]; 
       [[NSUserDefaults standardUserDefaults]synchronize]; 

       [self loadthepicker]; 

      } 

      else 
      { 


       NSLog(@"No matching filter name"); 

      } 


     } // end of for 

     //now save this array back. 


    } 

    else 
    { 

     NSUserDefaults *CheckFiltersUsed = [NSUserDefaults standardUserDefaults]; 
     NSInteger myInt = [CheckFiltersUsed integerForKey:@"FiltersUsed"]; 
     NSLog(@"Wrong number of filters!!!... %d",myInt); 

    } 

} 
+0

전자 문자열 @ "NULL"

그래서 대신 동일합니다. – matt

+0

열이 하나뿐이므로 그 중 하나의 구성 요소라고 생각합니다. 모든 행에 대해 무엇을 의미하는지 확신 할 수 없습니다. – rbk

답변

0

, 당신은뿐만 아니라 배열 및 피커에서 동일한 문자열을 삭제합니다.

대신이 라인의

[getarray insertObject:@"NULL" atIndex:j]; 

전화

[getarray removeObjectAtIndex:j]; 

** 업데이트 :하지만 대신에 당신은 지수 'J'는 deleteButton 방법에

에 다른있는 NSString 개체를 삽입

loadPicker에서 if 문을 제거하여 if

for (int j=0; j<20; j++) { 
    if ([[getarray objectAtIndex:j] isEqualToString:@"NULL"]) 
    { 
     // do nothing..don't load 
    } 
    else // add that filter to pickerLoaderArray 
    { 
     [pickerLoaderArray addObject:[getarray objectAtIndex:j]]; 
    } 
} 

해야 할 것 : : 당신은 모든 구성 요소의 모든 행에 대해 _something_이 있어야

for(NSString *pickerValue in getarray){ 
    [pickerLoaderArray addObject:pickerValue]; 
} 
+0

그러나 선택기에는 NULL을 제외한 모든 값이로드되어 있으므로이 빈 값이 표시됩니다. – rbk

+0

이 행이 실행될 때 NULL cuz를 제외한 모든 값이로드됩니다. [ "getArray objectAtIndex : j"isEqualToString : @ "NULL"] @ "NULL"값을 가진 모든 NSString 객체를 무시합니다. – YuviGr

+0

업데이트 된 대답보기 .. – YuviGr

관련 문제