我是 Evernote SDK 开发新手,正在使用 Evernote 推荐的 evernote cloud SDK 2.0。
但是,我无法从 ENNoteContent 对象中获取 NSString 内容。我已经通过在线搜索尝试了以下内容,但似乎都不适用于 cloud sdk,因为我猜它们都适用于旧版本的 Evernote SDK ...
1 使用“convertENMLToHTML”方法。
根据 this和 this ,我可以直接在 ENNoteContent 对象上调用 convertENMLToHTML,就像这样 convertENMLToHTML:note.content
。然而,在云 SDK 中,这导致 ENMLUtility 内部出现异常,终止应用程序,因为 convertENMLToHTML 需要一个 NSString 而不是 ENNoteContent,并且该函数做的第一件事是尝试调用 [enmlContent dataUsingEncoding:NSUTF8StringEncoding]]
如果 enmlContent 是指向 ENNoteContent 的指针而不是指向 NSString 的指针,则会导致异常。
2 试图从 ENNoteContent 对象中获取 _emml 对象
这post引用了调用 [note.content enml]
但这又不适用于 cloud sdk,因为接口(interface)中 undefined object enml
。
有谁知道如何从 ENNoteContent 中获取 NSString?我希望这是一个非常简单的过程,但令我惊讶的是我无法找到适用于 Cloud SDK 的任何东西。
3 使用 generateWebArchiveData 方法
根据下面 Sash 的回答,我还尝试在云 sdk 的示例中使用 generateWebArchiveData 方法。我的代码如下所示:
[[ENSession sharedSession] downloadNote:result.noteRef progress:^(CGFloat progress) {
} completion:^(ENNote *note, NSError *downloadNoteError) {
if (note) {
NSLog(@"%@", note.title);
[note generateWebArchiveData:^(NSData *data) {
NSString* strContent = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"test content %@", strContent);
}];
} else {
NSLog(@"Error downloading note contents %@", downloadNoteError);
}
}];
但是,strContent 输出“null”表示我已验证内容合法。
作为临时 hack,我们添加了 @property (nonatomic, copy) NSString * emml;
在 ENNoteContent.h 中并删除 ENNoteContent.m 中的同一行以暂时解决此问题。
最佳答案
你很接近。上面的技术 #1 是您想要的,但正如您发现的那样,enml 属性在“默认”SDK 中是私有(private)的。导入“高级”标题,您将可以访问 note.content.enml。这是一个字符串,如果您更喜欢 HTML 表示,可以将它发送到 convertENMLtoHTML。
请注意,现有笔记没有“纯文本”字符串内容。您将始终将其视为标记,如果您想摆脱标记,这样做超出了 SDK 的范围——如何做到这一点在很大程度上取决于您处理的内容是什么样子的。
关于ios - 使用 Evernote Cloud SDK 2.0 从 ENNoteContent 中获取 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32291357/