2013-06-06 4 views
2

iOS 및 Objective-C의 세계에 새로운 점을 감안할 때 저와 함께 해주십시오. 나는 애플의 Obj-C 입문서와 웹에서 제공되는 몇 가지 무료 입문서를 읽었습니다.레이블에서 텍스트를 가져와 iOS에서 문자열로 연결하는 표준 방법입니까?

버튼을 누르면 레이블의 텍스트를 가져 와서 문자열로 연결하려고합니다. 내 사고 방식은 여전히 ​​Android/Java에서 많이 사용되고 있으며 얼마나 간단 할 지 모르지만 여기서 문제가 있습니다. 그럼에도 불구하고 여기 내 코드는 다음과 같습니다

- (IBAction)myButton:(UIButton *)sender { 
    self.myLabel.text = [self.myLabel.text stringByAppendingString:@"obj-c is hard =/"]; 

} 

그것은 꽤 표준 것 같다,하지만 난 나 자신이 내가이 올바른지 또는이 일을 어떤 다른 방법이 있는지 확인하려면 종종이 일을 상상할 수 있는가?

답변

2

예. 올바른 방법입니다. 당신이 다른 방법을 사용하려는 경우 그리고 쉽게있는 NSArray와 NSDictiornary delaration처럼 만들기 위해 구문을 업데이트 string.As의 IOS에 가입하는 표준 방법이 하나

self.myLabel.text = [NSString stringWithFormat:@"%@ obj-c is hard =/",self.myLabel.text]; 
+0

'stringWithFormat'는 여러 인수를 전달할 수 있습니다? 'stringByAppendingString'과 달리 올바른가요? – EGHDK

+0

예 ............ –

+0

당신의 솔루션이 있다면이 대답을 수락하십시오 ... –

0

를 사용하지만 연결을 위해 어떤 바로 가기를 선언하지 않은 방법.

Have a look at this

또는

당신은 string.Pass의 연결을 매크로 사용 리터럴 구문에 합류 다음 매개 변수를 단순화하기 위해 트릭을 사용할 수 있습니다.

#define STRING(text) @""text"" 

@implementation SPTViewController 

- (void)viewDidLoad 
{ 
    NSString *joinedFromLiterals =STRING(@"Congratulations!, ") @"I " @"really " @"enjoy " @"carpenting!"; 
    NSLog(@"joined string %@",joinedFromLiterals); 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

출력은 ---------

가입 문자열 축하입니다! 정말 carpenting 즐기세요!

0

예, 올바르지 만 문제가 있습니다. 이전에 self.myLabel.text의 값을 설정하지 않은 경우 기본적으로 nil이됩니다. 그런 다음 어떤 메소드 (예 : [self.myLabel.text stringByAppendingString:@"obj-c is hard =/"])를 호출 한 결과도 0이 아니므로 myLabel은 여전히 ​​빈 텍스트를 갖습니다. Objective-C가 nil 값을 처리하는 방법은 Java에서 null을 처리하는 것과 다릅니다.
그래서, 안전을 위해 첫 번째 레이블의 텍스트를 초기화 : 당신이 바로 그 일을하는

self.myLabel.text = @""; 
0

. 물론 Objective-C는 C# 또는 Java 또는 심지어 Visual Basic .net (비록 모든 언어에서 작동 했었지만)보다 자세한 정보를 담고 있지만 긴 메서드 이름에 의해 도청 당하지는 않습니다. 일부 #define의이 같은 매우 도움이 될 수 있지만 (C 인라인 함수로 다시 작성) :

static inline __attribute__((always_inline)) 
__attribute__((format(NSStirng, 1, 2)) NSString *SKSTR(NSString *fmt, ...) 
{ 
    va_list args; 
    va_start(args, fmt); 
    NSString *string = [[NSString alloc] initWithFormat:fmt arguments:args]; 
    va_end(args); 
#if !__has_feature(objc_arc) 
    [string autorelease]; 
#endif 
    return string; 
} 

__attribute__의 희망과 #if의 당신을 혼동하지 않는다 - 당신이 안전하게 무시할 수 있습니다.

사용하려면

self.label.text = SKSTR(@"%@, ugh!", self.label.text); // just like NSLog or snprintf :)