2011-04-18 130 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