2014-08-28 2 views
0

서버에서 데이터를 가져 오는 메소드를 만들었습니다. 예를 들어 UILabel 또는 UITextView과 같이 문자열을 설정하려고 시도 할 때를 제외하고는 아무 문제가 없습니다.UILabel의 텍스트를 사용자 정의 메서드로 설정합니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    [self getDataFromURL:@"http://somesites.net/panel/services?action=events&num=1" 
       setTitle:_eTitle1.text image:_eImage1 description:_eNews1.text]; 

} 

얻기 데이터 :

-(void)getDataFromURL:(NSString*)url setTitle:(NSString*)eTitle 
        image:(UIImageView*)eImages description:(NSString*)eDescriptions { 


     NSURL *URL = [NSURL URLWithString:url]; 
     NSError *error1; 
     NSString *strPageContent = [NSString stringWithContentsOfURL:URL encoding:NSUTF8StringEncoding error:&error1]; 
     strPageContent = [strPageContent gtm_stringByUnescapingFromHTML]; 
     if ([strPageContent rangeOfString:@"<plist version=\"1.0\">"].location != NSNotFound) { 
      NSRange range = [strPageContent rangeOfString:@"<plist version=\"1.0\">"]; 
      strPageContent = [strPageContent substringWithRange:NSMakeRange(range.location+range.length, strPageContent.length-(range.location+range.length))]; 
      strPageContent = [strPageContent stringByReplacingOccurrencesOfString:@"</plist>" withString:@""]; 
     } 


     NSError *error = nil; 
     NSDictionary *dict = [XMLReader dictionaryForXMLString:strPageContent options:XMLReaderOptionsProcessNamespaces 
                 error:&error]; 

     if ([dict count]>0) { 

      NSDictionary *dictInner = [dict objectForKey:@"dict"]; 
      NSArray *arrValues = [dictInner objectForKey:@"string"]; 



      NSString * strTitle = [[arrValues objectAtIndex:0] objectForKey:@"text"]; 
      NSString *strImage = [[arrValues objectAtIndex:1] objectForKey:@"text"]; 
      NSString * strDescription = [[arrValues objectAtIndex:2] objectForKey:@"text"]; 

      eTitle = strTitle; 
      eDescriptions = strDescription; 

    //  [eImages setImageWithURL:[NSURL URLWithString:strImage] 
    //    placeholderImage:[UIImage imageNamed:@"loadingPad.jpg"]]; 

      NSLog(@"Title: %@ | Image: %@ | Desc: %@",eTitle,strImage,eDescriptions); 

     } 


    } 

컴파일러는 나에게 올바른 정보를 제공 여기 내 코드입니다! 하지만이 문자열은 내 lable로 설정할 수 없습니다, 만약 내가 내 lable의 문자열을 작동하는 방법으로 넣어! :

_eTitle1.text = strTitle ; 

답변

1

"텍스트"개체를 메서드에 전달하면 포인터가 전달됩니다. 직접 다른 NSString 객체를 할당하면 새로운 포인터가 할당됩니다. 문자열에 부작용이 있으려면 NSMutableString을 사용해야하지만 UILabel에는 텍스트 특성에 대해 변경할 수없는 NSString 만 있습니다. 그래서 유일한 해결책은 UILabel을 전달하거나 초기화 된 빈 가변 문자열을 메서드 내에 전달하고 [eTitleText setString:strTitle]을 통해 내용을 변경 한 다음 메서드 밖에서 UILabel text 특성에 할당하는 것입니다.

그래서 어느 당신은 (이미 그랬던 것처럼)이 같은 방법을 변경 :

-(void)getDataFromURL:(NSString*)url setTitle:(UILabel*)eTitle 
        image:(UIImageView*)eImages description:(NSString*)eDescriptions { 
... 
eTitle.text = strTitle; 
... 

과 같이 그것을 사용 :

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    [self getDataFromURL:@"http://somesites.net/panel/services?action=events&num=1" 
       setTitle:_eTitle1 image:_eImage1 description:_eNews1.text]; 

} 

또는이 다른 길을 갈 수 있습니다

-(void)getDataFromURL:(NSString*)url setTitle:(NSMutableString*)eTitle 
         image:(UIImageView*)eImages description:(NSString*)eDescriptions 
... 
[eTitle setString:strTitle]; 
... 

다음과 같이 사용하십시오.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSMutableString *titleText = [NSMutableString new]; 
    [self getDataFromURL:@"http://somesites.net/panel/services?action=events&num=1" 
       setTitle:titleText image:_eImage1 description:_eNews1.text]; 
    eTitle1.text = titleText; 
} 
+0

덕분에 효과가 없었습니다! 내 편집 된 질문, –

+0

당신은 무엇을 시도 했습니까? @ Mc.Lover 질문에 변경 사항이 보이지 않는다. –

+0

아하! 그것은 지금 일한다! !!! 감사 –

관련 문제