iphone - 创建地址簿副本

标签 iphone objective-c ios addressbook

我想把所有的iPhone通讯录联系人复制到一个数组中,然后把这个数组写入一个文件。我已经编写了以下代码并将其连接到一个按钮,但是当我点击这个按钮时我的应用程序崩溃了。

请帮我解决这个问题。

我的方法:

-(NSString *)pathOfFile{
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *documentsDirectory=[paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingFormat:@"contacts.plist"];
}


-(IBAction)createAddressBookCopy{

    ABAddressBookRef addressBook = ABAddressBookCreate();

    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

    NSMutableArray *masterList = [[NSMutableArray alloc] init];
    for (int i = 0; i < nPeople; i++) {
        ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i);
        CFStringRef fName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
        CFStringRef lName = ABRecordCopyValue(ref, kABPersonLastNameProperty);
        NSString *contactFirstLast = [NSString stringWithFormat: @"%@", (NSString *)fName];

        CFRelease(fName);
        CFRelease(lName);
        [masterList addObject:contactFirstLast];
        [contactFirstLast release];
    }

    //self.list = masterList;
    [masterList writeToFile:[self pathOfFile] atomically:YES];

    [masterList release]; 

}  

**这里我只保存了名字;

最佳答案

查看您的代码:

NSString *contactFirstLast = [NSString stringWithFormat: @"%@", (NSString *)fName];
// ....
contactFirstLast release];  // this is wrong

当您创建 contactFirstLast 时,您并不拥有它,而是在释放它。这就是您的应用程序崩溃的原因。

关于iphone - 创建地址簿副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708060/

相关文章:

iphone - 核心数据实体关系不会在启动之间保存

ios - 更改 UIAlertView 中按钮的辅助功能标签 - iOS

ios - 后台线程困惑

ios - FBSDKAppEvents.activateApp() 无法识别的选择器发送到实例

ios - 实例方法 'flatMap'要求 'String'符合 'ObservableConvertibleType'

iphone - Xcode 中的 Segue 头痛

iphone - MKMapKit 获取可见的注释 View

objective-c - 此崩溃日志中出了什么问题

iphone - 如何让 iPhone 屏幕变暗

objective-c - 在 Objective C 中检查互联网连接