リリース構成でビルドするとセグメンテーション違反が発生しますが、デバッグ構成では発生しません。
このコードは、実行時に読み込まれるバンドルです。クラッシュ自体は、my が実行される前に発生します (コンパイラが不正な形式のバイナリを生成していることを意味します。これは、ほぼ間違いなく、私のコードの問題が原因です)。クラッシュはこの関数で発生します: paranoid_check_one_class
以下のコードでは問題は発生しませんが、コメント アウトされている 2 行のコメントを解除すると、クラッシュが発生します。(コメントアウトするfirstName
かlastName
、company
機能させるために、3つすべてが気に入らないだけです)
-(NSArray *)specifiersForContacts {
NSMutableArray *contactSpecs = [NSMutableArray array];
ABAddressBookRef book = ABAddressBookCreateWithOptions(NULL, NULL);
for (NSNumber *contactID in [self contacts]) {
ABRecordRef contact = ABAddressBookGetPersonWithRecordID(book,[contactID intValue]);
NSString *firstName = (NSString *)ABRecordCopyValue(contact, kABPersonFirstNameProperty);
NSString *lastName = (NSString *)ABRecordCopyValue(contact, kABPersonLastNameProperty);
//NSString *company = (NSString *)ABRecordCopyValue(contact, kABPersonOrganizationProperty);
NSString *fullName = [NSString stringWithFormat:@"%@ %@", firstName ?: @"", company ?: @""];
PSSpecifier *contactSpec = [PSSpecifier preferenceSpecifierNamed:fullName
target:self
set:NULL
get:NULL
detail:Nil
cell:13
edit:Nil];
[contactSpec setValues:@[contactID]];
[contactSpec setProperty:[NSNumber numberWithInt:1] forKey:@"alignment"];
[firstName release];
[lastName release];
//[company release];
[contactSpecs addObject:contactSpec];
}
return [[contactSpecs copy] autorelease];
}