小编Mik*_*elW的帖子

UITextview裁剪有三个点吗?

我有一个UITextView显示一些可能会有不同大小的动态内容.textview不允许滚动,其大小与内容无关.鉴于其自动布局约束,文本视图在iphone5和iPhone6plus上具有不同的水平尺寸.

我想要的是我的文本在必要时被剪切,最后有3个点,就像"......"一样.(在UITextView下面有一个"更多"UIButton启动safari)

我不确定是否有UITextView属性,或者我是否应该考虑一些代码来检查textview在当前情况下可以显示的字符数,并修改我的字符串以便相应地显示(剪切和追加@"......").

谢谢.

uitextview ios autolayout

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

来自移动应用程序的REST API - 使用CAPTCHA确保第一次通话有意义吗?

假设我有一个iOS/Android应用程序,它依赖于自定义REST API来处理帐户管理(注册,登录,密码重置,获取/设置用户相关数据)等事务.

没有什么好方法可以保证我的API只能通过我的移动应用程序调用.Oauth2等在客户端代码中具有"秘密" - 可以很容易地进行逆向工程.

假设我有一个这样的API调用:

https://www.myapi.com/register_user?username=UUU&password=PPP&email=EEE

(当然,不是那样,但你明白了)

这将创建一个新用户,然后所有API调用将包含会话令牌或将API调用与具有帐户的特定应用程序用户相关联的内容.

第一次注册是唯一一个没有受到任何保护的注册,而我担心的是恶意的人从PC脚本中调用它1,000,000次以创建大量虚假用户,特别是使用真实的电子邮件地址.拥有这些地址的用户将无法使用该应用.

那么如何保护第一个API调用以防止大规模滥用呢?我正在考虑在用户注册表单中包含一个经过服务器验证的适合移动设备的CAPTCHA.

同样,所有后续API调用都受到会话令牌和每个用户监控的API调用计数的保护(可疑的被阻止).

那有意义吗?我是不是太复杂了?非常感谢

PS:似乎其他有趣的替代方案包括使用电子邮件验证或像谷歌这样的稳固的第三方身份提供商 - 这3个选项都不是完美的.无论如何,对围绕这个问题的讨论感兴趣.

security api rest captcha ios

7
推荐指数
1
解决办法
1062
查看次数

如何从Java Spring应用程序记录/跟踪Redis调用

我正在寻找记录来自我的java springboot微服务(查询和响应)的redis活动的最简单方法。

每当从/从Redis提取/插入数据时,我想查看(在springboot日志主文件中)日志行。

我的代码使用典型的spingframework数据redis方法,如下所示:

import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.TimeToLive;

@RedisHash
public class InternalAddress {
    private String county;
    private String postcode;
    @TimeToLive
    private Long expiry;
}
Run Code Online (Sandbox Code Playgroud)

*

import org.springframework.data.repository.CrudRepository;

public interface AddressRepository extends CrudRepository<InternalAddress, String> {}
Run Code Online (Sandbox Code Playgroud)

我试图启用一些这样的日志记录。

logging:
  level:
    root: INFO
    redis.clients: TRACE
    org.springframework.data: TRACE
Run Code Online (Sandbox Code Playgroud)

但是我得到的东西对我完全没有用:要么什么都没有,要么只是有关打开或关闭连接的一些信息...

我真正想在日志中看到的是:

2017-11-28T16:05:18.140+00:00 HGETALL key5645 => {...returned data...}
2017-11-28T16:05:25.140+00:00 LPUSH whatever
2017-11-28T16:05:25.140+00:00 HMSET blahblahblah
Run Code Online (Sandbox Code Playgroud)

任何的想法?我错过了我应该跟踪的正确课程吗?

我需要编写一些自定义的拦截器/侦听器/ AOP代码吗?

还有其他方法吗?提前致谢

logging trace subquery redis spring-boot

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

基于位置的增强现实框架(Android,iOS)与3D模型?

我正在寻找一种基于位置(不是基于标记的)增强现实框架,允许在Android和iOS中使用3D模型.

我对兴趣点(Point-of-interest)不感兴趣,因为我们已经有很多框架和大量文档可以自己完成这样的工作:http: //www.raywenderlich.com/42266/augmented-reality-ios -tutorial,基于位置的

基本上,使用与上述文章中相同的原理,但不是仅显示标签,而是可以存在例如建筑物大小的立方体; 我们可以绕过它,往下看,视角也会相应改变.

将手机GPS坐标(和3个角度)提供给覆盖OpenGL视图的"视角"并且足够开放以允许我将我想要的内容添加到OpenGL世界(可能也使用真实世界坐标),一些优化.

它是用于集成在具有其他功能的应用程序中,因此使用一些可用的AR浏览器也不起作用.

我所能找到的都非常昂贵.

提前致谢.

android geolocation augmented-reality ios

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

AVAudioPlayer仅在iOS模拟器上失败

我有这个代码,在iOS应用程序中播放声音时似乎非常标准.

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                     pathForResource:@"click"
                                     ofType:@"wav"]];

NSError *error;
self._audioPlayer = [[AVAudioPlayer alloc]
                initWithContentsOfURL:url
                error:&error];
if (error)
{
    NSLog(@"Error in audioPlayer: %@",
          [error localizedDescription]);
} else {
    self._audioPlayer.delegate = self;
    [self._audioPlayer prepareToPlay];
    [self._audioPlayer play];
}
Run Code Online (Sandbox Code Playgroud)

它在设备上运行得非常好.

然而,在模拟器上,它不会播放任何内容,只需打印此错误消息(由于应用程序不会崩溃,因此会在较低级别捕获).

2014-05-14 18:10:46.121 sample_app[7684:14303] 18:10:46.121 ERROR:     189: EXCEPTION thrown ('fmt?'): -
Run Code Online (Sandbox Code Playgroud)

(此错误可以多次打印)

调试时,一切看起来都没问题,nserror保持为nil,url有效等等.

audioPlayerDidFinishPlaying:successfully:是用1调用的事件.

任何人都有同样的问题或对我的环境有什么问题有建议吗?

非常感谢

audio avfoundation ios ios-simulator

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

spring-data-redis,空列表属性值变为null

我正在将一些微服务从 SpringBoot1.5 移植到 2.1。

我们正在使用 spring-data-redis。似乎默认的内部移动从 jedis 到 lettuce。

问题是我们现在观察到一些奇怪的行为,当我们保存一个对象然后检索它时,有一个微小的差异:

空列表属性将替换为 null。

这是一个例子:

//repo 
public interface TestRepository extends CrudRepository<Test, String> {}

...

//object
@RedisHash(timeToLive = 60) 
public static class Test{
    @Id private String id;
    int age;
    List<String> friends;
}

...

//saving then retreiving
Test test = new Test("1", 15, Collections.emptyList());
System.out.println(test);
testRepository.save(test);

Test testGet = testRepository.findById("1").get();
System.out.println(testGet);
Run Code Online (Sandbox Code Playgroud)

发生的事情是这样的:

//before
{
  "id": "1",
  "age": 15,
  "friends": []
}

//after 
{
  "id": "1",
  "age": 15
}
Run Code Online (Sandbox Code Playgroud)

空列表friends消失了。这种新行为会在许多地方影响我们的代码,导致 NullPointerException 等。

显然,有多个可用的序列化器,但这似乎没有任何效果。任何想法? …

serialization lettuce spring-data-redis spring-boot

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

java spring仓库-使用ID /值集的findBy()方法

我有一个Java Spring应用程序。它确实提供了后端的东西,提供了Restful API,全部使用Oracle数据库。

对于大多数资源,它遵循典型的设计模式:“控制器>服务>存储库> DB”。

在存储库级别,扩展JpaRepository接口时,无需提供主体即可定义一组方法,如下所示:

public interface SurgeryRepository extends JpaRepository<Surgery, String> {

    public List<Surgery> findByPracticeNameContainingIgnoreCase(String substring); 

    public Surgery findById(String id); 

}
Run Code Online (Sandbox Code Playgroud)

我想知道的是如何定义一个方法,该方法允许我使用ID列表检索多行,例如:

public List<Surgery> findByIDs(List<String> IDs); 
Run Code Online (Sandbox Code Playgroud)

应该自动映射到这种SQL的东西

SELECT * FROM SURGERIES WHERE SURGERY_ID IN ('101',102,103',104',105',106')
Run Code Online (Sandbox Code Playgroud)

...但不必在Java代码中编写本机查询。(不一定是id,它可以是任何字段)预先感谢。

java database spring spring-data spring-data-jpa

4
推荐指数
1
解决办法
4764
查看次数

将NSString以原子方式附加到文件中?

一些写文件的函数是原子的,因此在写入时发生某些事情时它们可以防止文件损坏.

-[NSData writeToFile:atomically:]
-(BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;
Run Code Online (Sandbox Code Playgroud)

问题是他们擦除文件并用新内容替换它...我需要在一个巨大的文件中附加一行.

以原子方式执行此操作的最佳方法是什么,而不是冒着损坏该文件的风险?

PS:文件太大而无法在一个字符串中读取它,更新字符串然后将巨大的字符串推送到文件系统.

提前致谢.

iphone file atomic objective-c

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

互斥的java方法执行(不是全部)

我有一个包含4种方法的java类:

public void method_A() {   ...   }

public void method_B1() {   ...   }

public void method_B2() {   ...   }

public void method_B3() {   ...   }
Run Code Online (Sandbox Code Playgroud)

许多多个线程都使用此类的实例来调用方法B1 B2和B3.那些并发执行是绝对正常的

但是,在内部调用method_A()时,应该永远不会调用另外3个.当method_A()运行时,不应该运行其他方法,它们应该等待某种锁定,直到method_A()完成.

真的不确定如何转换为代码.非常感谢

java concurrency locking thread-safety

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