FamilySearchCocoa 0.10.1

FamilySearchCocoa 0.10.1

测试已测试
Lang语言 Obj-CObjective C
许可证 BSD
发布上次发布2014年12月

Adam Kirk 维护。



 
依赖项
MTPocket>= 0
MTDates>= 0
MTJSONUtils>= 0
 

  • 作者
  • Adam Kirk

一个易于使用的库,用于在 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>"