我希望WiX在卸载时删除AppData文件夹,所以我查看了RemoveFolderEx并按照一些帖子/指南介绍了如何使其正常工作.据我所知,我的实现应该有效,但事实并非如此.我正在使用以下内容:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="AppDataFolder">
<Directory Id="PRIVATEDATAFOLDER" Name="MyApp"/>
</Directory>
</Directory>
<Property Id="PRIVATEDATAFOLDER">
<RegistrySearch Root="HKCU" Key="Software\AppCo\MyApp" Type="raw"
Id="APPLICATIONFOLDER_REGSEARCH" Name="PrivateDir" />
</Property>
<DirectoryRef Id='PRIVATEDATAFOLDER'>
<Component Id="PrivateData" Guid="myGuid">
<CreateFolder Directory="PRIVATEDATAFOLDER"/>
<util:RemoveFolderEx Property="PRIVATEDATAFOLDER" On="uninstall"/>
<RemoveFolder Id="PRIVATEDATAFOLDER" On="uninstall"/>
<RegistryValue Root="HKCU" Key="Software\AppCo\MyApp" Name="PrivateDir"
Type="string" Value="[PRIVATEDATAFOLDER]" KeyPath="yes"/>
</Component>
</DirectoryRef>
Run Code Online (Sandbox Code Playgroud)
我有什么问题吗?
编辑:检查详细日志后,我收到错误:
WixRemoveFoldersEx: 错误0x80070057:缺少文件夹属性:PRIVATEDATAFOLDER
目前,我正在制作一个简单的应用程序,使用语音合成API说出文本.我想强调说出来的话(粗体).我目前有一个非常基本的实现,使用'onboundary'事件.但是,我想知道是否有更好/更好的方法,因为我的实现基于一些假设.
var words;
var wordIdx;
var text;
var utterance = new SpeechSynthesisUtterance();
utterance.lang = 'en-UK';
utterance.rate = 1;
window.onload = function(){
document.getElementById('textarea').innerText = 'This is a text area. It is used as a simple test to check whether these words are highlighted as they are spoken using the web speech synthesis API (utterance).';
document.getElementById('playbtn').onclick = function(){
text = document.getElementById('textarea').innerText;
words = text.split(' ');
wordIdx = 0;
utterance.text = text;
speechSynthesis.speak(utterance);
}
utterance.onboundary = function(event){
var e = document.getElementById('textarea');
var it …Run Code Online (Sandbox Code Playgroud) 使用以下Firebase电子邮件身份验证代码,您如何知道身份验证是否成功?
firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
if (errorCode === 'auth/wrong-password') {
alert('Wrong password.');
} else {
alert(errorMessage);
}
console.log(error);
});
Run Code Online (Sandbox Code Playgroud)
我知道很容易认识到身份验证是否不成功,但是,我如何知道用户是否能够使用他们提供的凭据登录?似乎没有"成功"登录的回调.我目前有一个登录表单,我想要成功登录导航.
我目前正在尝试为读取和写入操作重载“[]”运算符。我创建了它们,如下所示:
V operator[] (K key) const; //Read
V& operator[] (K key); //Write
Run Code Online (Sandbox Code Playgroud)
但是,仅从以下两个调用“写入”:
foo["test"] = "bar"; //Correct, will use 'write'
cout << foo["test"]; //Incorrect, will use 'write'
Run Code Online (Sandbox Code Playgroud)
这是什么原因,是否有可能的解决方案?
同样没有帮助的问题,在这里找到:C++: Overloading the [ ] operator for read and write access
尽管如此,所提供的解决方案并未按预期工作,并且仍然只访问了写重载。
说我有一个类Foo:
class Foo
{
public:
Foo();
~Foo();
private:
Bar* mBar;
}
Run Code Online (Sandbox Code Playgroud)
并假设'Bar'是一个有少数成员需要初始化的类.初始化该成员时使用的最佳做法是什么?
示例1:在Foos构造函数中执行所有操作:
Foo::Foo()
{
mBar = new Bar("some", "required", "members");
}
Run Code Online (Sandbox Code Playgroud)
示例2:创建单独的初始化函数:
Foo::Foo()
{
}
Foo::Initialize()
{
mBar = new Bar("some", "required", "members");
}
Run Code Online (Sandbox Code Playgroud)
示例3:两部分初始化,假设'Bar'也有set方法
Foo::Foo
{
mBar = new Bar();
}
Foo::Initialize()
{
mBar->SetMembers("some", "required", "members");
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个插件,将一个段落分成句子然后说出,并在阅读时突出显示句子。在大多数情况下,我可以完成此操作,但当我想突出显示当前正在阅读的句子时,问题就出现了。
我有一个函数,可以根据用户光标的位置将段落分成句子:
function selectionTest() {
Word.run(function (context) {
originalRange = context.document.getSelection();
var paragraphs = originalRange.paragraphs;
context.load(paragraphs, 'text');
context.load(originalRange, 'text');
return context.sync().then(function () {
//Range should only be present in a single paragraph, rather than spanning multiple
if (paragraphs.items.length === 1) {
var paragraph = paragraphs.items[0];
var ranges = paragraph.getTextRanges(['.'], true);
context.load(ranges, 'text');
return context.sync(ranges);
}
}).then(function (sentences) {
...
Run Code Online (Sandbox Code Playgroud)
我想在“originalRange”对象上突出显示文本,以便突出显示正确的句子,如下所示:
function highlightSentence(id, colour) {
Word.run(function (context) {
var paragraphs = originalRange.paragraphs;
context.load(paragraphs, 'text');
context.load(originalRange, 'text');
...
Run Code Online (Sandbox Code Playgroud)
但这会产生错误,因为“originalRange”正在多个上下文中使用。有没有办法让我在多个上下文或其他解决方案中使用“originalRange”?
更新:
我尝试在函数中再次获取段落的句子,使用“context.trackedObjects.add”作为原始范围。当尝试从中获取“paragraphs”属性时,这会导致相同的错误。
我意识到我可能需要的只是段落中的句子,而不是使用原始范围再次获取句子。相反,我实施了不同的解决方案: …
如何从我的actionLayout(即菜单项)中具体获取开关,以便设置'setOnCheckedChangeListener'事件?
这是我的导航抽屉菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/nav_switch"
app:actionLayout="@layout/action_view_switch"
android:title="One-to-one mode" />
</menu>
Run Code Online (Sandbox Code Playgroud)
使用action_view_switch actionlayout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<Switch
android:id="@+id/otoSwitch"
android:layout_width="fill_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
最后,我的导航抽屉:
<android.support.design.widget.NavigationView
android:id="@+id/nvView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
app:menu="@menu/drawer_view"
app:headerLayout="@layout/nav_header"/>
Run Code Online (Sandbox Code Playgroud)
我了解我可以执行以下操作:
Menu menu = navigationView.getMenu();
MenuItem menuItem = menu.findItem(R.id.nav_switch);
View actionView = MenuItemCompat.getActionView(menuItem);
actionView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
Run Code Online (Sandbox Code Playgroud)
但这并没有给我任何像isChecked这样的状态,例如'setOnCheckedChangeListener'。如何获取切换视图,以便可以设置其侦听器?
目前,我有一个要填充的列表,但列表项可以有不同的数据。我有两个数据类,为了适应 RecyclerView,我有两个不同的 ViewHolder,扩展了一个基本的基本 ViewHolder。由于不同的数据类使用不同的布局,因此需要不同的 ViewHolder。
我已将视图持有者转换为 Kotlin,但是我遇到了适配器问题。
Kotlin 中的基本 ViewHolder:
abstract class BaseViewHolder<T> internal constructor(view: View) : RecyclerView.ViewHolder(view) {
abstract fun bind(item: T)
}
Run Code Online (Sandbox Code Playgroud)
在 Kotlin 中实现基础 ViewHolder 的 ViewHolder:
class StandardViewHolder(view: View): BaseViewHolder<Standard>(view) {
private val _eventView : TextView = view.findViewById(R.id.eventTextView)
private val _dateView : TextView = view.findViewById(R.id.dateTextView)
override fun bind(item: Standard) {
_eventView.text = item.event
_dateView.text = item.date.toString()
}
}
Run Code Online (Sandbox Code Playgroud)
在 Java 中,我可以创建一个使用这些 ViewHolders 的适配器:
public class ListAdapter extends RecyclerView.Adapter<BaseViewHolder> {
private List<Object> _items;
private Context _context;
public …Run Code Online (Sandbox Code Playgroud) 出于学习目的,我正在创建一个基于具有类似地图功能的数组的容器.每次我插入一个键,我想保持数组的顺序.我已经实现了函数来查找键应该在数组索引中的位置,我目前唯一的问题是有效地移动数组元素.
我有一个简单的循环来做到这一点:
for (size_t i = mSize; i > n; i--)
{
mCont[i] = mCont[i - 1];
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望可以使用诸如memmove之类的东西来更快地做到这一点 - 但我不确定如何使用它 - 当容器的大小增加时.
谢谢你的时间.