2011-04-18 127 views
1

我想将所有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]; 

} 

**这里我只保存名字;

+0

崩溃的类型是什么? – 2011-04-18 20:07:39

+0

该应用关闭。 – Shahriar 2011-04-18 20:09:38

+0

模拟器显示与其他应用程序图标(家庭屏幕)的应用程序图标。 – Shahriar 2011-04-18 20:10:26

回答

0

看你的代码:

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

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

+0

真棒....这个工程。非常感谢你的人......这是一个愚蠢的错误... – Shahriar 2011-04-18 20:20:37