测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | BSD |
发布上次发布 | 2014年12月 |
由 Adam Kirk 维护。
依赖项 | |
MTPocket | >= 0 |
MTDates | >= 0 |
MTJSONUtils | >= 0 |
一个易于使用的库,用于在 iOS 或 OS X 上与 FamilySearch.org API 进行交互。
在您的 Podfile 中添加此行
pod "FamilySearchCocoa"
pod? => https://github.com/CocoaPods/CocoaPods/
FSPerson
是对象图的中心。对 FSPerson
进行所有更改,然后在该人身上调用保存。
对属性、关系等进行大量修改后,对某个人调用 save
,它将所有这些提交到服务器。
fetch
将相同操作反方向执行。它将一次从服务器获取所有属性和关系。
请参阅头文件以获取完整的 API 和更多文档。
MTPocketResponse
对象的方法都是阻塞的,需要在后台线程上调用。save
以保存整个对象。使用 FSUser 登录并获取会话 ID
FSUser *user = [[FSUser alloc] initWithDeveloperKey:SANDBOXED_DEV_KEY];
MTPocketResponse *response = [user loginWithUsername:SANDBOXED_USERNAME password:SANDBOXED_PASSWORD];
if (response.success) {
_sessionID = user.sessionID;;
}
如果您想使用沙盒环境
[FSURL setSandboxed:YES];
获取自己的信息
FSPerson *me = [FSPerson currentUserWithSessionID:_sessionID];
MTPocketResponse *response = [me fetch];
if (response.success) {
me.name // => @"Adam Kirk"
me.isAlive // => YES
me.gender // => @"Male"
me.parents.count // => 2
[me characteristicForKey:FSPropertyTypeOccupation]; // => @"Saint"
}
获取其他人的信息
FSPerson *you = [FSPerson personWithSessionID:_sessionID identifier:@"BLAH-BLAH"];
MTPocketResponse *response = [you fetch];
if (response.success) {
you.name // => @"Gamima Smitty"
you.gender // => @"Female"
you.parents.count // => 1
}
创建人物
person = [FSPerson personWithSessionID:_sessionID identifier:nil];
person.name = @"Adam Kirk";
person.gender = @"Male";
MTPocketResponse *response = [person save];
更新人物
person = [FSPerson personWithSessionID:_sessionID identifier:@"BLAH-BLAH"];
[person setCharacteristic:@"Programmer" forKey:FSPropertyTypeOccupation];
[person save];
添加/删除父母
person.parents.count // => 0
FSPerson *father = [FSPerson personWithSessionID:_sessionID identifier:nil];
father.name = @"Nathan Kirk";
father.gender = @"Male";
[person addParent:father withLineage:FSLineageTypeBiological];
[person save];
person.parents.count // => 1
[person removeParent:father];
[person save];
person.parents.count // => 0
添加/删除孩子
person.children.count // => 0
FSPerson *child = [FSPerson personWithSessionID:_sessionID identifier:nil];
child.name = @"Jim Kirk";
child.gender = @"Male";
[person addChild:child withLineage:FSLineageTypeAdoptive];
[person save];
person.children.count // => 1
[person removeChild:child];
[person save];
person.children.count // => 0
添加/删除事件
person.events.count // => 0
FSEvent *death = [FSEvent eventWithType:FSPersonEventTypeDeath identifier:nil];
death.date = [NSDateComponents componentsFromString:@"11 August 1995"];
death.place = @"Kennewick, WA";
[person addEvent:death];
FSEvent *event = [FSEvent eventWithType:FSPersonEventTypeBaptism identifier:nil];
event.date = [NSDateComponents componentsFromString:@"11 August 1994"];
event.place = @"Kennewick, WA";
[person addEvent:event];
[person save];
person.events.count // => 2
[person removeEvent:event];
[person save];
person.events.count // => 1
便利事件
person.birthDate = [NSDateComponents componentsFromString:@"11 August 1995"];
person.birthPlace = @"Kennewick, Benton, Washington, United States";
person.deathDate = [NSDateComponents componentsFromString:@"11 August 1996"];
person.deathPlace = @"Pasco, Franklin, Washington, United States";
[person save];
添加/删除婚姻
person.marriages.count // => 0
FSPerson *spouse = [FSPerson personWithSessionID:_sessionID identifier:nil];
spouse.name = @"She Kirk";
spouse.gender = @"Female";
FSMarriage *marriage = [FSMarriage marriageWithHusband:person wife:spouse];
[person addMarriage:marriage];
[person save];
person.marriages.count // => 1
[person removeMarriage:marriage];
[person save];
person.marriages.count // => 0
添加/读取婚姻属性
FSPerson *spouse = [FSPerson personWithSessionID:_sessionID identifier:nil];
spouse.name = @"She Man";
spouse.gender = @"Female";
FSMarriage *marriage = [FSMarriage marriageWithHusband:person wife:spouse];
[person addMarriage:marriage];
[person save];
person.marriages.count // => 1
[marriage setProperty:@"2" forKey:FSMarriagePropertyTypeNumberOfChildren];
[marriage setProperty:@"True" forKey:FSMarriagePropertyTypeCommonLawMarriage];
[marriage save];
FSPerson *p = [FSPerson personWithSessionID:_sessionID identifier:person.identifier];
[p fetch];
FSMarriage *m = [p marriageWithSpouse:spouse];
[m propertyForKey:FSMarriagePropertyTypeNumberOfChildren] // => @"2"
[m propertyForKey:FSMarriagePropertyTypeCommonLawMarriage] // => @"True"
添加/删除婚姻事件
person.spouses.count // => 0
FSPerson *spouse = [FSPerson personWithSessionID:_sessionID identifier:nil];
spouse.name = @"She Man";
spouse.gender = @"Female";
FSMarriage *marriage = [FSMarriage marriageWithHusband:person wife:spouse];
[person addMarriage:marriage];
[person save];
person.marriages.count // => 1
marriage.events.count // => 0
FSMarriageEvent *event = [FSMarriageEvent marriageEventWithType:FSMarriageEventTypeMarriage identifier:nil];
event.date = [NSDateComponents componentsFromString:@"11 August 1995"];
event.place = @"Kennewick, WA";
[marriage addMarriageEvent:event];
[marriage save];
marriage.events.count // => 1
[marriage removeMarriageEvent:event];
[marriage save];
person = [FSPerson personWithSessionID:_sessionID identifier:person.identifier];
[person fetch];
FSMarriage *m = [person marriageWithSpouse:spouse];
m.events.count // => 0
将用户从添加祖先到家族树到进行他们的教堂工作的流程简单到
// create a person
FSPerson *person = [FSPerson personWithSessionID:_sessionID identifier:nil];
// add minimum info to qualify them for reservation
person.name = @"Nathan Kirk";
person.gender = @"Male";
person.deathDate = [NSDateComponents componentsFromString:@"11 August 1970"];
person.deathPlace = @"Pasco, Franklin, Washington, United States";
[person save];
// reserve the person, claiming you want to do their ordinances
[FSOrdinance reserveOrdinancesForPeople:@[person] inventory:FSOrdinanceInventoryTypePersonal];
// generate a family ordinace request and return the URL to it.
NSURL *url = [FSOrdinance familyOrdinanceRequestPDFURLForPeople:people response:&response];
一旦获取到 Family Ordinance Request PDF 的 URL,应用程序可以下载 PDF 并让用户查看/打印。
您可以添加并读取附加在人物上的媒体(例如照片、音频等)。
// create and upload an artifact
UIImage *image = [UIImage imageNamed:@"jimmy"];
FSArtifact *artifact = [FSArtifact artifactWithData:UIImagePNGRepresentation(image) MIMEType:FSArtifactMIMETypeImagePNG sessionID:_sessionID];
MTPocketResponse *response = [artifact save];
// tag a person in the artifact
FSArtifactTag *tag = [FSArtifactTag tagWithPerson:_person title:@"Don Kirk" rect:CGRectMake(0, 0, 60, 88)];
[artifact addTag:tag];
response = [artifact save];
// remove a tag
[artifact removeTag:tag]
response = [artifact save];
// fetch all the artifacts a person is tagged in
NSArray *artifacts = [FSArtifact artifactsForPerson:_person category:FSArtifactCategoryImage response:&response];
// delete an artifact
response = [artifact destroy];
要运行单元测试,您需要创建包含以下内容的缺失的 "constants.h" 文件
#define SANDBOXED_DEV_KEY @"<sandboxed dev key>"
#define SANDBOXED_USERNAME @"<sandboxed username>"
#define SANDBOXED_PASSWORD @"<sandboxed password>"
#define PRODUCTION_DEV_KEY @"<live dev key>"
#define PRODUCTION_USERNAME @"<live username>"
#define PRODUCTION_PASSWORD @"<live password>"
#define PRODUCTION_PERSON_ID @"<a real id from a person in the production tree>"