在我的应用程序中,不同的画布存储为"页面",每个画布的内容存储为"单元格"。
现在当我想加载占用/组成一个画布的所有单元格时,我会像这样检索它们:
public Task<List<Cell>> GetCellsAsync(string uPageGUID)
{
return database.QueryAsync<Cell>("SELECT * FROM cells WHERE cellpageguid = ?", uPageGUID);
}
这很有效。
现在我想找出&#34; pageguid&#34;页面的值为&#34; pageisstartpage&#34;设置为true。
因此,我尝试以下方法:
public Task<string>GetStartPageGUID()
{
nPages<List<Page>>=database.QueryAsync<Page>("SELECT * FROM pages WHERE pageisstartpage=?", true);
return nPages.First.GUID;
}
编译器告诉我:
nPages在当前环境中不存在。
我不知道我犯了什么错误。
答案 0 :(得分:3)
当前上下文中不存在nPages ....我看不出我犯了什么错误。
首先要提到的是List<Page>
的声明似乎倒退了。
nPages<List<Page>>=database....
必须首先写入类型,然后是变量名。
List<Page> nPagesTask = database...
另一种解释可能是您有一个泛型类型变量nPages
,您要在其中指定泛型类型。因此编译器会查看此变量是否已被声明。显然它找不到任何东西。
第二件事如果您有一个返回Task<string>
的异步方法,您可以执行以下操作:
public async Task<string>GetStartPageGUID()
{
Task<List<Page>> nPagesTask = database.QueryAsync<Page>("SELECT * FROM pages WHERE pageisstartpage=?", true);
List<Page> npages = await nPagesTask;
return nPages.First().GUID;
}
以下是QueryAsync
方法的source。这是签名:
public Task<List<T>> QueryAsync<T> (string query, params object[] args)
所以它返回Task<List<T>>
。由于您的方法指定了不同的返回类型,通常的模式是在async
方法中等待它,如the MSDN example中所述,然后返回您在方法中指定的类型。
答案 1 :(得分:0)
您必须正确声明nPages:
The following build commands failed:
CompileC build/Build/Intermediates/ArchiveIntermediates/MyApplication/IntermediateBuildFilesPath/MyApplication.build/Release-iphoneos/MyApplication.build/Objects-normal/arm64/com_codename1_io_websocket_WebSocketNativeImplImpl.o MyApplication-src/com_codename1_io_websocket_WebSocketNativeImplImpl.m normal arm64 objective-c com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)
Failed xcodebuild step