我正在使用Sitecore Mobile SDK创建本机IOS应用。到目前为止,我能够阅读我需要的项目但是我仍然坚持从Droplink字段中的链接项目中读取fieldvalue。
我使用此代码:
SCApiContext* context = [SCApiContext contextWithHost: @"http://<myhost>/-/item"];
SCItemsReaderRequest* request = [ SCItemsReaderRequest new ];
request.requestType = SCItemReaderRequestQuery;
request.request = @"/sitecore/content/Home/descendant::*[@@templatename='Content item']";
request.flags = SCItemReaderRequestReadFieldsValues;
request.fieldNames = [ NSSet setWithObjects: @"Content title", @"Content author", @"Content introduction", @"Content date", @"Content body" , nil ];
[context itemsReaderWithRequest: request]( ^(id result, NSError* error)
{
NSArray* items = result;
for (SCItem* item in result)
{
// get the author
__block NSString *author = @"empty";
SCField *dropLinkField = [item fieldWithName: @"Content author"];
[dropLinkField fieldValueReader]( ^(id result, NSError *error)
{
if (!error)
{
SCItem *linkedItem = result;
// TODO: author is not yet filled
NSSet *fieldsSet = [NSSet setWithObjects:@"Firstname", nil];
// this method seems to be skipped
[linkedItem fieldsReaderForFieldsNames:fieldsSet]( ^(id result2, NSError *error2)
{
if (!error2)
{
NSDictionary *fields = result2;
SCField *field_ = [fields objectForKey: @"Firstname"];
author = field_.rawValue;
}
});
}
});
}
}
读取原始项目,我可以读取droplink字段的字段值。我似乎也可以读取链接的Item,因为我可以将它的itempath写入日志。但是当我尝试从链接项中读取一个字段时,它会失败并且似乎会跳过“fieldsReaderForFieldsNames”方法。
我显然在这里做错了什么,但似乎忽略了这个问题......
编辑:
我忘了提到我使用Sitecore 7,不确定它是否有所作为。 我在上面添加了创建SCApiContext和SCItemReaderRequest的行。
我使用匿名访问,在“网站设置”中我使用
itemwebapi.mode="StandardSecurity"
itemwebapi.access="ReadOnly"
itemwebapi.allowanonymousaccess="true"
我只是认为我发现了这个问题,因为我没有在几个字段上设置字段远程读取权限。但是,设置该权限未解析它以及没有Field Remote Read集的其他字段确实在API中返回。
答案 0 :(得分:1)
Sitecore iOS SDK操作(来自下面的列表)在后台操作队列上异步执行。
* fieldValueReader
* fieldsReaderForFieldsNames
这并不保证在您访问作者数据时下载作者数据。
请使用完成回调功能块中的下载项目和字段,以确保它们存在于您的iPhone上。
[linkedItem fieldsReaderForFieldsNames:fieldsSet]( ^(id result2, NSError *error2)
{
NSLog(@"Read author field");
if (!error2)
{
NSLog(@"No error");
NSDictionary *fields = result2;
SCField *field_ = [fields objectForKey: @"Firstname"];
author = field_.rawValue;
// Now all required fields will
// definitely be downloaded by the time you create a blog item
NSLog(@"voornaam: %@", author);
ParTechBlogItem *blogItem;
blogItem = [[ParTechBlogItem alloc] initWithTitle:[item fieldValueWithName:@"Content title"]
date:[item fieldValueWithName:@"Content date"]
intro:[item fieldValueWithName:@"Content introduction"]
author:author
text:[item fieldValueWithName:@"Content body" ]];
[weakSelf addBlogItem:blogItem];
}