1

名簿から生年月日を取得して、テーブルビューセルに表示したい。名簿から生年月日を取得できますが、テーブルビューのセルに表示するとアプリがクラッシュします。これが私のコードです

// in viewDidLoad
 birthdateString = [ContactDetails getBirthDate:record];


 +(NSString*)getBirthDate:(ABRecordRef)record{

    NSString *birthdateString=[(NSDate*)ABRecordCopyValue(record, kABPersonBirthdayProperty) description];
    NSArray *array=[birthdateString componentsSeparatedByString:@" "];

    birthdateString=[array objectAtIndex:0] ;
    NSLog(@"birthDay: %@",birthdateString);
    return birthdateString;
}

// in cellForRowAtIndexPath
cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CELL_ID] autorelease];
cell.detailTextLabel.text=birthdateString;

NSZombieEnabled時のコンソールログ

*** -[CFString isEqualToString:]: message sent to deallocated instance 0x6eb5520

どんな親切な助けもありがたいです。

4

2 に答える 2

1

完全なコードではないのでわかりませんが、デバッグ中に nil 値を確認してください。メモリ割り当てを取得していない NSString がいくつかあります。ちょうど答えを得た

// in cellForRowAtIndexPath
cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2          reuseIdentifier:CELL_ID] autorelease];
  NSString *brithdateString=[self getBrithDate:record];
cell.detailTextLabel.text=birthdateString;

getBrithDate メソッドが呼び出された後にローカルで割り当て解除された brithdateString を使用しています

于 2012-03-21T12:07:23.657 に答える
0

これを試して

CFDateRef birthDate = ABRecordCopyValue(record, kABPersonBirthdayProperty);
NSDateFormatter *dateFormatter = nil;
if(birthDate)
{
   if (dateFormatter == nil) {
   dateFormatter = [[NSDateFormatter alloc] init];
   [dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
   [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
} 
NSString* birthDay = [dateFormatter stringFromDate:(NSDate*)birthDate ];
NSLog(@"birthDay: %@",birthDay);
if (dateFormatter != nil)
[dateFormatter release];
CFRelease(birthDate);
于 2012-03-21T12:51:44.713 に答える