小编Log*_*gan的帖子

Firebase PresenceManaging iOS

我正在实现一个基于firebase文档的系统:

[connectionMonitor observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
    if([snapshot.value boolValue]) {
        // connection established (or I've reconnected after a loss of connection)

        // add this device to my connections list
        // this value could contain info about the device or a timestamp instead of just true
        Firebase * con = [[Firebase alloc]initWithUrl:[NSString stringWithFormat:@"%@Users/%@/connections/", urlString, currentUserId]];
        Firebase * newConnection = [con childByAutoId];
        [newConnection setValue:@YES];

        // when this device disconnects, remove it
        [newConnection onDisconnectRemoveValue];
    }
}];
Run Code Online (Sandbox Code Playgroud)

如果用户完全断开连接,哪个工作正常,但那是我的问题.

我使用这个系统来查看用户是否在线.如果他们不在线,我会触发推送通知.如果用户关闭应用程序,firebase不会断开连接,但它也不会收到更新,因此在另一端,用户看起来仍然在线.要正确设置firebase onDisconnect值,用户需要完全关闭应用程序.

我通过添加以下内容解决了这个

- (void)applicationWillResignActive:(UIApplication *)application
{ …
Run Code Online (Sandbox Code Playgroud)

ios firebase

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

安全iOS文本字段似乎调整文本大小.怎么避免这个?

我在iOS7中遇到了一个安全文本字段的奇怪问题.这似乎是一个愚蠢的细节,但我想解决它.

事实证明我有两个文本字段,一个用于插入用户名,另一个用作用户密码的输入.问题是,当我在密码字段中插入文本时,点大小变小,但是当这个安全文本字段停止作为第一响应者时,点的大小变为它应该的大小(大于第一响应者时) .

作为一个ilustration,看看从我的应用程序中提取的这两个图像:

非第一响应者:

非第一响应者

急救人员:

在此输入图像描述

如您所见,点的大小会根据安全文本字段是否为第一响应者而更改.

有没有办法避免这种大小调整?

谢谢大家.

附加信息:

  • 我正在使用外部文本字体,似乎在文本字段上工作正常.

  • 两个文本字段的文本大小均为17.0.

  • 字体类型和字体大小都在文本字段所在的ViewController的ViewDidLoad方法中设置.

textfield ios

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

UICollectionView scrollToItemAtIndexPath在导航控制器中无法正常运行

我有一个方法,我用它滚动到我的collectionView的底部

- (void) scrollToBottom {
    if (_messagesArray.count > 0) {
        static NSInteger section = 0;
        NSInteger item = [self collectionView:_myCollectionView numberOfItemsInSection:section] - 1;
        if (item < 0) item = 0;
        NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:item inSection:section];
        [_myCollectionView scrollToItemAtIndexPath:lastIndexPath atScrollPosition:UICollectionViewScrollPositionBottom animated:YES];
    }
}
Run Code Online (Sandbox Code Playgroud)

而且效果很好!我从来没有遇到任何问题,它的工作方式是100%一致的...用模态视图演示.但是,如果我将viewController推送到导航控制器上,它就不起作用了.相反,只有超过15个单元格才有效.一旦我达到至少15个细胞,它再次开始表现完美.在15个单元格之前,它要么根本不滚动,要么滚动一点.

我意识到这是一个很长的镜头,但我在这个问题上摸不着头脑,我想也许有人可能知道发生了什么事.

故障排除:

你有登录以确保它正在运行吗?是

您是否已记录索引路径以确保其尝试滚动到正确的索引路径?是

在此输入图像描述

工作模式示例

在此输入图像描述

objective-c ios

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

为什么将未命名的函数作为变换传递给数组会在最远的抽象中在操场中向迭代计数添加一个

我正在根据Swift编程指南中的示例,将未命名的函数作为参数传递,并且我正在使用它来练习.

所以我们有一个Ints 数组:

var numbers: Int[] = [1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

我应用这样的变换:(7)

func transformNumber(number: Int) -> Int {
    let result = number * 3
    return result
}

numbers = numbers.map(transformNumber)
Run Code Online (Sandbox Code Playgroud)

等于:(7)

numbers = numbers.map({(number: Int) -> Int in
    let result = number * 3
    return result;
    })
Run Code Online (Sandbox Code Playgroud)

等于:(8)

numbers = numbers.map({number in number * 3})
Run Code Online (Sandbox Code Playgroud)

等于:(8)

numbers = numbers.map({$0 * 3})
Run Code Online (Sandbox Code Playgroud)

等于:(8)

numbers = numbers.map() {$0 * 3}
Run Code Online (Sandbox Code Playgroud)

正如您在下图中所看到的,操场侧栏中的迭代计数显示,在函数声明的最远抽象中,它具有8个计数.

在此输入图像描述

为什么它显示为最后两个示例的8次迭代?

swift

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

使用Getters和Setter来修改没有Swift中Subclassing的值

假设我有一个类,当我设置它的属性时,我希望它附加一个文件类型的属性.fileType:

class File {
    var fileName: String {
    get {
        return self.fileName
    }
    set {
        self.fileName = fileName + ".fileType"
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用这样的:

let newFile = File()
newFile.fileName = "My File"
Run Code Online (Sandbox Code Playgroud)

不幸的是,变量从未设置:

检查点

我有两种可能的解决方法.

选项1:设置后观察值

class File {
    var fileName: String = "" {
    didSet {
        self.fileName += ".fileType"
    }
    }
}

let file = File()
file.fileName = "SomeName" // SomeName.fileType
Run Code Online (Sandbox Code Playgroud)

但是有了这个,我必须等到这个值已经设置好才能修改它.对于这个特殊的例子,它并没有太大的区别; 但是,我希望能够避免这种情况.

选项2:子类

此解决方案基于此处的示例. 搜索'speedLimitedCar'

class File {
    var fileName = ""
}

class …
Run Code Online (Sandbox Code Playgroud)

swift

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

来自Afnetworking的大图像缓存

我正在使用AFNetworking将一些图像从互联网下载到我的应用程序.我正在使用此代码下载这些图片,

AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:_linkString[indexPath.item]]]];
requestOperation.responseSerializer = [AFImageResponseSerializer serializer];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 150, 150)];
    _imageView.image = responseObject;

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Image error: %@", error);
    }];

[requestOperation start]; 
Run Code Online (Sandbox Code Playgroud)

我注意到所有响应映像都是从此方法自动缓存到磁盘的.我的应用程序中也有这个选项.所有缓存的图像大小约为150kb.但是当我下载大约2MB大小的图像时,这些图像不会自动缓存到磁盘.

为什么小尺寸图像被缓存而大尺寸图像没有被缓存?我是否使用错误的方法在AFNetworking中缓存图像?

任何人都可以使用AFNetworking为我提供缓存2MB图像的解决方案....

谢谢

iphone caching objective-c ios afnetworking

3
推荐指数
1
解决办法
959
查看次数

Github API 返回发布数组的空资产

我正在尝试通过 gitHub api 跟踪 gitHub 版本的 download_count 。我不需要太多,我只是想看看它是什么。

我正在尝试获取此信息:http ://developer.github.com/v3/repos/releases/#response

从 URL 中可以看到,返回包含一个“download_count”键,但不幸的是,我的资产数组完全是空的。

通过使用这个:

NSString * owner = @"...";
NSString * repo = @"...";
NSString * repoId = @"...";

// Get Release Info
NSString * releaseURL = [NSString stringWithFormat:@"https://api.github.com/repos/%@/%@/releases", owner, repo];

// Get Assets List Specifically
NSString * assetsURL = [NSString stringWithFormat:@"https://api.github.com/repos/%@/%@/releases/%@/assets", owner, repo, repoId];

NSURL * gitAssetsURL = [NSURL URLWithString:releaseURL];
NSData * gitAssetsRawData = [NSData dataWithContentsOfURL:gitAssetsURL];
NSString * gitDataString = [[NSString alloc] initWithData :gitAssetsRawData encoding:NSASCIIStringEncoding];
NSLog(@"%@", gitDataString);
Run Code Online (Sandbox Code Playgroud)

一切输出都很好,但我的资产数组始终为空。我确实有版本,并且所有存储库上的资产数组都是空的。

github repository github-api ios

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

比较数组扩展中的对象导致Swift中的错误

我正在尝试构建一个扩展,将NSArray/NSMutableArray的一些便利功能添加到Swift Array类中,我正在尝试添加此函数:

func indexOfObject(object:AnyObject) -> Int? {

    if self.count > 0 {
        for (idx, objectToCompare) in enumerate(self) {
            if object == objectToCompare {
                return idx
            }
        }
    }

    return nil
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这一行:

if object == objectToCompare {
Run Code Online (Sandbox Code Playgroud)

给出错误:

无法找到接受提供的参数的'=='的重载

我做错了什么导致这个错误?

extension Array {

    func indexOfObject(object:AnyObject) -> Int? {

        if self.count > 0 {
            for (idx, objectToCompare) in enumerate(self) {
                if object == objectToCompare {
                    return idx
                }
            }
        }

        return nil
    }

} 
Run Code Online (Sandbox Code Playgroud)

swift

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

声明`_stdlib_getTypeName()`&`_stdlib_getDemangledTypeName()`在哪里? - 斯威夫特

我正在玩Swift中的一些内省,看起来如果你想在一个可打印的版本中得到一个对象的类,这些是最好的选择.(在beta 6.0中引入).

_stdlib_getTypeName(someClass)
_stdlib_getDemangledTypeName(someClass) // A slightly cleaner version
Run Code Online (Sandbox Code Playgroud)

我希望找到其他内省方法,但不幸的是,点击方法的命令将我带到Swift标题,并且它们没有在那里声明.

我的另一种选择是键入_stdlib并等待自动完成或控制空间以查看我的选项.不幸的是,这些方法都没有自动完成.

是否存在声明这些和其他stdlib函数的文件,或者是否存在这些方法的文档?

swift

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

可以在Swift 2.2中使用Vapor Web框架吗?

如何在Ubuntu 14上安装Vapor,并在本地安装以使用最新的Swift版本?

swift vapor

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

密码验证 - 如何安全地检查输入的密码是否正确

我正在开发一个需要多个密码来访问不同数据区域的应用程序.例如,一群人可以设置需要密码身份验证才能查看的聊天.

这是我正在考虑这样做的方式:

我有我的关键字,假设说:

香蕉

当用户输入密码时,我使用RNCryptor Banana使用输入的密钥加密,并将加密的字符串存储到服务器.

稍后,当有人试图输入密码时,我从服务器获取散列值并尝试使用他们输入的密码作为密钥对其进行解密.如果解密的值等于Banana我知道他们输入了正确的密码.

我是安全的新手,所以我不确定这是否是一个合适的解决方案.所有帮助表示赞赏.

更新

在进行了@Greg建议的一些改动以及恰当命名的@ Anti-weakpasswords后,这就是我所拥有的:

- (NSDictionary *) getPasswordDictionaryForPassword:(NSString *)password {

    NSData * salt = [self generateSalt256];
    NSData * key = [RNCryptor keyForPassword:password salt:salt settings:mySettings];

    NSMutableDictionary * passwordDictionary = [NSMutableDictionary new];

    NSString * saltString = stringFromData(salt);
    NSString * keyString = stringFromData(key);

    passwordDictionary[@"key"] = keyString;
    passwordDictionary[@"salt"] = saltString;
    passwordDictionary[@"version"] = @"1.0.0";
    passwordDictionary[@"iterationCount"] = @"10000";

    return passwordDictionary;
}

static const RNCryptorKeyDerivationSettings mySettings = {
    .keySize = kCCKeySizeAES256,
    .saltSize = 32,
    .PBKDFAlgorithm = kCCPBKDF2, …
Run Code Online (Sandbox Code Playgroud)

security encryption passwords objective-c rncryptor

0
推荐指数
1
解决办法
938
查看次数