2013-05-07 1 views
2

그래서 한 묶음의 입력 문자열을 하나의 문자열로 연결하여 텍스트 파일로 저장할 수 있습니다. 지금까지 나는이 유일한 문제는 내가 이런 식으로 저장 (30) 문자열의 총을 필요로한다는 것입니다이Objective-C에서 문자열을 함께 연결하려면 어떻게해야합니까?

NSString *tempString = [[NSString alloc]initWithFormat:@"%@%@%@", text1, text2, text3]; 

뭔가를 쓰기 위해 노력하고 있어요. 각 문자열 이름을 입력하지 않고이 작업을 수행 할 방법이 필요합니다. for 루프 또는 이것을 수행하는 방법을 사용할 수 있습니까? 이런 식으로 문자열을 입력 하시겠습니까?

text(i) 

for 루프를 통과 할 때마다 변수 이름이 변경됩니다. 이런 식으로 시도한 결과 작동하지 않습니다. 이 방법이나 다른 방법으로 도와 주시면 감사하겠습니다.

+0

문자열의 출처는 어디입니까? – Joe

+0

텍스트 상자의 사용자 입력입니다. – Logiwan992

+0

텍스트 상자가 배열에 저장되어 있습니까 – Joe

답변

1

당신은 당신이 KVC를 사용하여 텍스트 값에 접근하고 참여할 수있는 텍스트 상자의 배열을 가질 것이다.

Using iOS 4's IBOutletCollection

프로그래밍 당신이 그들을 만들 때 텍스트 상자가 다음 배열에 추가 작성하는 경우

//interface 
... 
@property (nonatomic, strong) IBOutletCollection(UITextField) NSArray *textBoxes; 


//implementation 
... 
    NSString *tempString = [[textBoxes valueForKey:@"text"] 
          componentsJoinedByString:@""]; 
.

+0

내가 찾고있는 것은 분명합니다. 배열의 텍스트 상자를 정렬하는 방법이 있습니까? 왜냐하면 제가 말할 수있는 한 그것은 꽤 무작위 적이기 때문입니다. – Logiwan992

+0

'IBOutletCollection'이 무작위 순서로 나타나면 그것을'NSMutableArray'와'viewDidLoad' [sort] (https://developer.apple.com/library/ios/#documentation/Cocoa/)로 선언 할 수 있습니다 개념적/SortDescriptors/Articles/Creating.html) 귀하의 기준 (즉,'태그')에 따라 배열. – Joe

0

NSMutableString's appendString: 방법은 친구입니다. 당신이 IBOutletCollection(UITextField)와 인터페이스 빌더에서 텍스트 상자를 설정 한 경우

NSArray *strings = [NSArray arrayWithObjects: @"Hi", @" there", @" dude", nil]; 

NSMutableString *result = [[NSMutableString alloc] init]; 

for (NSString *string in strings) { 
    [result appendString:string]; 
} 

NSLog(@"result: %@", result); // result: Hi there dude 
+2

또는'[strings componentsJoinedByString : @ ""]' – Joe

+0

@Joe 확실한가요? –

+0

그래서이 배열을 사용하여 각 텍스트 상자 이름을 입력해야합니다. 30을 고려하지 않으려 고합니다.이 모든 것을 입력하지 않고서는이 작업을 수행 할 수 없습니까? – Logiwan992

3

오케이, 여기 모든 대답이 잘못된 접근법을 사용합니다 (죄송합니다.).

근본적인 문제는 간단히보기가되어야 할 때 데이터 소스로 "텍스트 상자"를 사용한다는 것입니다. 누군가 텍스트를 변경하면 모델에 즉시 저장하고 (간단한 배열 일 수 있음) 나중에 해당 모델을 참조해야합니다. (이것은 MVC의 일부입니다. 익숙하지 않은 경우 iOS 용으로 프로그래밍 할 때와 마찬가지로 봐주세요!)

다음은 내가하는 일입니다. (나는 당신의 "텍스트 상자"UITextField 년대가 있으리라 믿고있어.)

  1. 이보기 컨트롤러에 각 텍스트 필드에 대한 위임을 설정합니다.
  2. 설정 당신이 가입 한 문자열을 원하는 순서를 나타내는 숫자로 각 텍스트 필드에 대한 태그입니다. (예 : 1-30)

  3. 당신은 당신의 데이터 모델을위한 별도의 클래스가없는 경우 , 모든 문자열을 순서대로 포함 할 수있는 NSMutableArray에 대한 참조를 저장하는보기 컨트롤러에서 선언 된 속성을 설정하십시오. dataSource이라고합시다. viewDidLoad:에서이 값을 빈 값 (또는 저장하는 경우 이전에 저장된 값)으로 채워진 실제 변경 가능한 배열로 설정합니다.그런 다음

    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
        self.dataSource = [[NSMutableArray alloc] initWithCapacity:20]; 
        for(int i = 0; i < 30; i++) 
         [self.dataSource addObject:@""]; 
    } 
    
  4. 다음 텍스트 필드 대리자를 사용 : 우리가 빈 값을 저장하는 이유는 우리가 그들이 순서가 입력 된 경우에도, 어떤 인덱스에 대한 사용자 입력 문자열로 교체 할 수 있도록이다 이들이 입력으로 배열에 문자열을 저장 방법

    // This is called every time that a text field finishes editing. 
    - (void)textFieldDidEndEditing:(UITextField *)textField 
    { 
        if (textField.tag > 0) 
         [self.dataSource replaceObjectAtIndex:textField.tag-1 withObject:textField.text]; 
    } 
    
  5. 축하 모든 문자열이 하나의 배열에 저장됩니다. 이제 우리는 그들 모두를 결합해야 : 난 그렇게 오타가있을 수 있습니다이 모든 테스트하지 않았습니다

    NSMutableString *theString = [self.dataSource componentsJoinedByString:@""]; 
    

참고. 이것은 올바른 방향으로 향하게해야합니다!

+0

틀린가요? 잘못된!!! 아아아! :) – Undo

+2

오타가 있지만 이것은 사용자가 임의의 순서로 UITextFields를 채우는 경우를 다루는 유일한 대답 인 것처럼 보입니다. 컴퓨터 앞에있을 때 수정하여 오타를 수정합니다. +1 – geraldWilliam