小编Jon*_*lis的帖子

使用从Jackson创建的对象在Android上使用OrmLite保存子集合

我有一个REST服务,我正在从我的应用程序调用,它将一个JSON对象作为一个JSON对象byte[],然后变成一个漂亮的嵌套对象集合 - 所有这一切工作正常.我当时想要做的就是使用OrmLite将这些对象持久化到SQLite存储,这就是事情开始崩溃的地方,因为据我所知,OrmLite不会自动持久化嵌套对象.

为简单起见,让我们删除我的实际功能,并让我的对象简单地建模如下:

@DatabaseTable(tableName = "parents")
public class Parent {

    @DatabaseField(id=true)
    private String name;

    @ForeignCollectionField
    // have to use Collection here because needs to be compatible with Jackson
    private Collection<Child> children; 

    /* Getters and setters go here */
}

@DatabaseTable(tableName = "children")
public class Child {

    @DatabaseField(id=true)
    private String name;

    @DatabaseField(foreign=true)
    private Parent parent;

    /* Getters and setters go here */
}
Run Code Online (Sandbox Code Playgroud)

发生的情况是,在Parent使用我的相应parentDao对象添加在数据库中创建新对象时,子项不会与父项一起保留.

这是一个常见的问题并且之前已经提出过,在SO上肯定还有其他问题与这个非常类似,最值得注意的是在Android上用ORMLite保存嵌套的外来对象,以回答Gray建议在父对象之前创建子对象的问题.可以正常手动创建我的POJO.

但是,我还没有看到一个答案,这些因素是由另一个库(在本例中为Jackson)生成对象的情况.没有深入挖掘杰克逊的反序列化内部(它消除了其简单性的全部好处)并试图让杰克逊创建子对象然后将它们添加到父对象(除非我遗漏了一些东西,这比听起来容易吗?)在这种特殊情况下,这似乎不是一个特别有吸引力的解决方案.

同样,还有其他解决方案涉及向外键添加更多注释,这些注释似乎适合处理单个子对象,但在使用@ForeignCollectionFields及其相应的Collections 时,这些注释不可用.

java orm android jackson ormlite

55
推荐指数
1
解决办法
1814
查看次数

iOS上的NSNetServiceBrowser/Bonjour问题

我正在为我正在开发的iOS项目开发的应用程序中使用Bonjour(确切地说是NSNetServiceBrowser)而不是WiFi.

然而,尽管注意到为什么NSNetServiceBrowser在iPhone OS中找到未发布的服务的优秀响应中提出的问题我仍然遇到NSNetSericeBrowser的一些困难.

我的设置如下:

  • 使用运行iOS 4.5.3的iPad.
  • 使用AirPort Express作为接入点/路由器.
  • 在连接到网络的Mac上运行dns-sd -B _serviceName工作正常 - 也就是说,所有发布和停止的调用都会立即反映在桌面上.

但是,我遇到了以下问题: -

  1. 长期发布的服务(大约15分钟+)往往不会被客户删除,即使它们从Mac上消失了!(即不调用didRemoveService).
  2. 有时,网络上的其他人看不到发布的服务,即使它们出现在Mac上!(即未调用didFindService) - 这可能与下面的3/4点相关...如果应用程序在iPad连接到网络之前开始运行(和搜索),那么它不会搜索新网络正常.
  3. 如果设备在发布服务后更改网络会发生什么?我发现,卓悦并没有重新发布该服务的新网络上-一个人如何可以强制这种情况发生?
  4. 如果设备在搜索服务时更改网络会发生什么?我发现这也会导致问题,并且往往会导致找不到会话(未调用didFindService).

我一直遇到的问题很奇怪,因为Bonjour 90%的时间都在工作......只有10%会破坏我的应用程序的可靠性!令人讨厌的是,通过双击主页按钮并强制关闭应用程序,然后重新运行它,可以解决上述所有问题.再次运行后,它总是找到正确的会话或正确发布.

避免这个问题的一种方法是在无线网络发生变化时拆除并重新启动NSNetServiceBrowser ......但这似乎非常混乱和不必要.令人沮丧的是,Bonjour是一个高级API,没有任何实际的调整和测试选项.

我有什么想法可以解决问题1-4?

谢谢!

iphone bonjour nsnetservice ios nsnetservicebrowser

12
推荐指数
1
解决办法
7233
查看次数

在Swift中获取Cocoa Touch Framework项目版本字符串

Cocoa Touch Frameworks提供版本控制支持,可以在版本控制部分的构建设置中找到.

要在运行时访问此值,我们可以使用为我们自动生成的FrameworkVersionNumberFrameworkVersionString[]变量作为构建过程的一部分.

使用Swift项目时,可以在Objective-C兼容性标头的顶部自动生成这些项目:

//! Project version number for Framework.
FOUNDATION_EXPORT double FrameworkVersionNumber;

//! Project version string for Framework.
FOUNDATION_EXPORT const unsigned char FrameworkVersionString[];
Run Code Online (Sandbox Code Playgroud)

但是,虽然FrameworkVersionNumber可以从Swift访问,但FrameworkVersionString[]不是.实际上看一下框架模块的内容,我可以看到只有第一个变量暴露给Swift:

//! Project version number for Framework.
var FrameworkVersionNumber: Double
Run Code Online (Sandbox Code Playgroud)

这个问题是,因为FrameworkVersionNumber是a Double,任何版本号如3.2.1只需更改为3.200000 ...

有谁知道这是否是我的项目设置中的缺陷,Xcode中的一个错误,或者是否有一种方法可以将Swift中的框架版本作为一个String或数组获得,这样我可以提供比major.minor更精细的版本控制?

xcode objective-c ios swift

10
推荐指数
1
解决办法
3404
查看次数

缩放UIWebView

我有一个UIWebView我用来显示各种内容,有时是HTML,有时是PDF/Powerpoint /等(这些似乎都是由相同的底层控件处理).

我想要做的是利用底层UIScrollView(子视图UIWebView)来捕获滚动视图的精确视角,并在另一个中重新创建滚动位置UIWebView,从而使它们保持同步.

我遇到的问题是,显示HTML内容时的zoomScale属性UIScrollView总是1.0(尽管显示PDF内容时zoomScale是正确的).

我设法找到了唯一可以获得HTML页面缩放比例的地方是scrollViewDidEndZooming:withView:atScale:委托方法.我发现这个atScale:参数似乎提供了一个相对缩放比例,它是缩放比例在缩放操作开始之前的尺度.因此,例如当放大时,该参数> 1,当缩小时它是<1,并且它似乎是两个缩放比例之间的相对值而不是绝对缩放比例.

我进一步发现,从根本上说,HTML和PDF内容由两个不同的底层视图UIWebBrowserView处理:处理HTML内容和UIWebPDFView处理PDF的显示.

换句话说,当使用a时UIWebPDFView,其zoomScale属性UIScrollView是完全可靠的(例如1.0,2.4用于缩小,例如用于放大).另一方面,UIWebBrowserView更加繁琐,并且在询问UIScrollView它时zoomScale,总是返回1.0,但是在接收委托回调时,接收作为相对值的缩放值.

所以我的问题是: -

  1. 这是一个错误吗?(从我所见过的iOS 4和5上都可以看到这种行为).

  2. 如何同时获取zoomScaleHTML和PDF内容的(或其他属性/属性),并以这样的方式获取状态,即状态可以复制并与另一个状态保持同步UIWebView.

我不喜欢使用zoomScale,所以我愿意接受其他关于如何UIWebView在另一个上捕获和再现a的滚动状态的建议UIWebView.

iphone objective-c uiwebview ios

9
推荐指数
2
解决办法
1万
查看次数

Xcode 4.4无法重命名类/变量

在Xcode 4.4和4.4.1上我遇到了与我正在处理的特定项目相同的问题,我似乎无法从Refactor菜单选项重命名任何类或变量.

每次我尝试重命名时,我都会输入类/变量的新名称,然后单击Preview左下角开始一个微调器的位置Finding files....但是,我接到一条消息说:

选择不是可以重命名的类型.

进行不同的选择,然后重试.

我很确定这不是我特定的Xcode安装的问题,因为我可以很好地重构其他项目,只是我似乎无法重构这个特定的项目.

有想法的人吗?对于这个项目,我没有任何特别奇特的配置,它似乎是一个随机的痛苦.我删除了所有的派生数据并重新编制索引,但这似乎没有帮助.

由于它在其他项目中运行正常,我想我可以尝试做的一件事就是重新生成实际的项目文件本身.我不知道是否有办法自动执行此操作?

xcode refactoring objective-c xcode4.4 xcode4.5

7
推荐指数
2
解决办法
2887
查看次数

iOS11视觉框架映射所有面部标志

我正在使用视觉框架并使用此代码获取所有标志性要点:

if let allFaceLandmarks = landmarks.allPoints {
    print(allFaceLandmarks)
}
Run Code Online (Sandbox Code Playgroud)

但无法找到这些点的映射.例如右眼的索引号.

看起来完全相同,但对于ios愿景框架:

image-processing face-recognition ios swift ios11

7
推荐指数
3
解决办法
3687
查看次数

SQL - 删除重复对

我正在使用SQLite 使用两列u和v 来存储图的一组无向边.例如:

紫外线

1 2

3 2

2 1

3 4

我已经使用SELECT DISTINCT*FROM edge完成了它并删除了所有重复的行.

但是,如果我们记住这些是无向边缘,仍然有重复.在上面的例子中,边(1,2)出现两次,一次为(1,2),一次为(2,1),它们都是等价的.

我希望删除所有这些重复项,只留下其中一个(1,2)或(2,1) - 这并不重要.

任何想法如何实现这一目标?谢谢!

sql sqlite graph unique distinct

6
推荐指数
2
解决办法
1万
查看次数

Javascript:计算div中的可见字符

我有一个div包含S任意长度的文本(长度的字符串),但是固定的大小.超过一定长度(让我们称之为L),文本被截断,文本的其余部分不再可见.(从技术上讲,范围[0,L)是可见的,范围[L,S)不是).

我想要做的是L通过仅计算文本中可见的字符数来找到文本的长度div.超出截止点的任何字符都应该被忽略.

我很高兴使用jQuery等第三方库,如果能完成工作的话!

html javascript jquery count

5
推荐指数
1
解决办法
3131
查看次数

从门户删除配置文件是否会导致应用程序过期?

我们有一个应用程序,已使用临时配置文件分发给员工。

现在,我们有一项业务需求,即从供应门户删除供应配置文件(尽管它将保留在设备上)。

我的印象是,使用临时分发时,会对Apple的服务器进行定期检查(尽管我认为这是针对服务器上存储的证书来检查设备上存储的配置文件的有效性,因此不应除非证书被吊销,否则配置文件上的任何更改都将受到影响,对吧?)。

我的问题是:

从我们的布建门户中删除临时布建配置文件会导致该应用停止在员工设备上运行吗?

iphone itunes ipad ios

5
推荐指数
1
解决办法
241
查看次数

是否可以使用FragmentTabHost手动创建片段?

FragmentTabHost 在其通常的配置中足够有礼貌地为我们处理片段的实例化,这意味着我们只需要传入类中,并完成剩下的工作:

mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("friends").setIndicator("Friends"), FriendsFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), ContactsFragment.class, null);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我们只需要传递Fragment类(例如FriendsFragment.class)和传递的args包(在本例中null)并且FragmentTabHost将为我们处理片段的初始化.它似乎也很懒惰,只会在实际更改选项卡时加载片段.

在很多情况下都很棒,但我想要做的是手动预先创建我的片段,然后将它们附加到FragmentTabHost之后.这样做的主要优点是我可以确保所有选项卡片段始终存在,而不是在用户更改选项卡时懒惰地创建.

理想情况下,我想拥有的是这样的东西(如果只存在方法!):

FriendsFragment f1 = new FriendsFragment();
ContactsFragment f2 = new ContactsFragment();

mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("friends").setIndicator("Friends"), f1);
mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), f2);
Run Code Online (Sandbox Code Playgroud)

所以问题是:是否可以手动预先创建片段,FragmentTabHost或者是否有必要完全采用不同的方法?

android android-fragments android-tabs

5
推荐指数
0
解决办法
240
查看次数