2011-08-09 5 views
0

저는 간단한 코드로 조금 붙어 있습니다 : 테이블에있는 셀에 시계를 넣고 싶습니다. View, 가능합니까? 나는이 코드를 가지고 :날짜 문자열을 셀에 넣을 수 있습니까?

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [NSTimer scheduledTimerWithTimeInterval:1.0f 
            target:self 
            selector:@selector(updateTime:) 
            userInfo:nil repeats:YES]; 
} 

- (void)updateTime:(id)sender{ 

    NSDate *StrDate = [NSDate date]; 
    NSDateFormatter *Dateformat = [[NSDateFormatter alloc]init]; 
    [Dateformat setDateFormat:@"DD-MM-YYYY HH:mm:ss"]; 
    NSMutableString *DateStr = [NSMutableString stringWithFormat:@"%@",[Dateformat stringFromDate:StrDate]]; 

    string = DateStr; 
} 

.H 파일을, 내가 만든 :

인 NSMutableString * 문자열;

및 cellForRow ... 방법

, 전 입력 :

cell.textLabel.text = 문자열;

이렇게 작동하지 않는 이유는 무엇입니까? [self.tableView reloadData]을 :

덕분에 많은

+0

좋아요. 문자열을 변경할 수 없도록하려고 했습니까? NSString? 또한'string'을 어디에 선언합니까? –

+0

날짜 형식이 유출 중입니다. – dasdom

+0

@dasdom : Dateformat에 대해 당신은 무엇을 제안합니까? – Paul

답변

1

당신은 오토 릴리즈 가변 문자열을 만들 수 있습니다.

string = DateStr; 

하면 DateStr의 주소로 string의 주소를 할당합니다. DateStr은 자동 실행되고 있으므로이 주소는 실행 루프가 끝난 후 아무데도 가리 키지 않습니다. 당신도

string = [DateStr retain]; 

DateStr을 유지하거나

NSMutableString *DateStr = [[NSMutableString alloc] initWithFormat:@"%@",[Dateformat stringFromDate:StrDate]]; 

으로 유지 DateStr를 생성하지만 문자열이 함께 이전 주소로 지적으로 다시 누수를 얻을 수 있습니다. 따라서 당신은 문자열을 속성

@property (nonatomic, copy) NSMutableString *string; 

을 만들고 다음 코드를 사용한다 : 당신이 문자열을 복사하는 마지막 행으로

NSMutableString *DateStr = [NSMutableString stringWithFormat:@"%@",[Dateformat stringFromDate:StrDate]]; 

self.string = DateStr; 

합니다.

+0

감사합니다 dasdom, 그래서 속성을 시도했지만 셀이 여전히 비어 있습니다. (numberofRows와 같은 실수를 확인하거나 ivar 및 속성의 "type"이 다른 경우) ,하지만 다 괜찮아 보인다). DateStr에 "retain"하는 것과 같은 일이지만, 설명을 해준 덕분에 더 많은 것을 이해하게되었습니다. 또한 프로젝트에 누수가있을 경우 셀에 텍스트가 표시되지 않습니다. 또는 코드를 작성하는 것은 잘못된 방법 일 뿐이지 만 텍스트는 여전히 셀에 나타납니다. 마지막으로 왜 @prop에서 "retain"대신 "copy"를 사용합니까? 다시 한 번 감사드립니다. – Paul

+0

섹션 수를 1로 설정 했습니까? – dasdom

+0

나중에 DateStr이 변경되는지 여부를 알 수 없으므로 retain 대신 copy를 사용해야합니다. 그것은 단지 안전을위한 것입니다. 모바일 장치의 메모리가 무한대가 아니기 때문에 누출이 나쁜 것입니다. 따라서 누출로 인해 앱이 다운됩니다. – dasdom

0

나는 당신의 TableView 당신의 데이터를 다시로드해야합니다 생각합니다. Do this after string = DateStr;

+0

당신은 메모리 관리에 매우 좋지 않습니다. Alloc/init + retain은 그것을 두번 유지할 것이고 당신은 아마 누수가있을 것이다. –

+0

이것을 제거하십시오 :'string = [[[NSMutableString alloc] init] retain]; string = DateStr;'이것은 완전히 틀리기 때문입니다.문자열을 초기화하고 유지 한 다음 문자열의 주소를 새 주소에 할당합니다. 따라서 메모리 누수가 발생합니다. – dasdom

+0

그게 내 대답에서 제안한 것입니다. (저는 실제로 메모리 관리에 나빴습니다). 나는이 질문의 미래 독자의 혼란을 피하기 위해 나의 대답을 편집했다. –

0

문자열을 이처럼 텍스트 필드에 할당 해 보았습니까?

NSMutableString *DateStr = [NSMutableString stringWithFormat:@"%@",[Dateformat stringFromDate:StrDate]]; 

[cell.textField setStringValue: string]; 
+0

고맙지 만 작동하지 않는다고 말합니다 : 구조체 또는 공용체가 아닌 멤버 'textField'요청 ... – Paul

+0

시도 할 또 한 가지 ... [cell.view.textField setStringValue : string]; –

+0

이것은 cell이 NSTableCellView의 인스턴스 또는 하위 클래스라고 가정합니다. –

관련 문제