新框架中將要使用最多的應該就是cncontactstore這個類了,官方對其的定義是乙個執行緒安全的,用來執行查詢和修改操作的類。此外官方還針對於這個類的使用給出了幾點小建議。
1.只去查詢那些你需要的聯絡人屬性。
2.當查詢所有聯絡人並快取結果時,首先查詢所有聯絡人的identifier,然後通過identifier來查詢所需要的詳細的聯絡人資訊。
3.想取出多個聯絡人資訊時,可以先收集聯絡人的唯一identifier,然後通過identifier來查詢所需要的詳細的聯絡人資訊。
4.如果快取了聯絡人資訊,那麼當接收到cncontactstoredidchangenotification時你需要重新整理資料。
5.cncontactstore的查詢方法中執行了i/o操作,所以應該避免在主線程中執行。
首先匯入contacts.frame和contactsui.frame
然後在info.plist中新增nscontactsusagedescription後面的字串是你向使用者申請許可權的描述。
請求許可權
cnauthorizationstatus status = [cncontactstore authorizationstatusforentitytype:cnentitytypecontacts];
switch (status)
});
ios8之後是可以直接從應用內跳轉到設定頁面來修改通訊錄許可權的
//跳轉到設定應用訪問聯絡人介面
當聯絡人發生變化的時候通知,比如我們專案儲存的聯絡人資料的重新整理
//聯絡人發生變化通知
[[nsnotificationcenter defaultcenter] addobserver:self selector:@selector(addressbookdidchange:) name:cncontactstoredidchangenotification object:nil];
// do any additional setup after loading the view, typically from a nib.
}-(void)addressbookdidchange:(nsnotification*)anotification
//請求授權提示框
-(void)requestdetermain
}];}
已經拿到使用者的授權了,那麼接下來就可以讀取使用者資料了。首先,我們需要建立乙個cncontactfetchrequest物件。這裡簡單說一下predicate和keystofetch這兩個引數,其中的predicate謂詞引數,必須是由cncontact+predicates生成的。至於keystofetch引數,個人理解是由兩部分組成的,其中一部分可以去cncontact.h的最下面查,另一部分可以查詢cncontactformatter.h
獲取聯絡人列表
-(void)obtaincontact:(cncontactstore *)store];
}
如果沒什麼意外情況的話,所需要的通訊錄資訊都已經存在這個陣列裡面了,需要注意的是這個方法的結果不是一次性返回的,這個可以通過監控stop引數來確定。 獲取電話聯絡
importandroid.provider.contactscontract.commondatakinds.structuredpostal importandroid.provider.contactscontract.commondatakinds.website importandroid...
Windows Mobile獲取聯絡歷史
在現有的.net compact framework中,無論是1.0 2.0還是3.5版本,都沒有直接獲取使用者聯絡歷史的介面,那麼,我們只能自己封裝底層api來實現了。改介面在phone.dll中,呼叫phonegetcalllogentry方法會返回乙個聯絡歷史結構,在該結構中,包含號碼 姓名 ...
Windows Mobile獲取聯絡歷史
在現有的.net compact framework中,無論是1.0 2.0還是3.5版本,都沒有直接獲取使用者聯絡歷史的介面,那麼,我們只能自己封裝底層api來實現了。該介面在phone.dll中,呼叫phonegetcalllogentry方法會返回乙個聯絡歷史結構,在該結構中,包含號碼 姓名 ...