动态选择要使用RAC观察的属性

时间:2015-06-27 11:14:27

标签: ios objective-c xcode reactive-cocoa

我在一个视图中有很多UISegmentedControls(实际上是74个),我希望使用RACChannel与它们各自的模型属性进行双向绑定。为了减少代码,我想在运行时使用IBOutletCollection的枚举来分配这些绑定。

为了使这项工作,我必须想出一种动态选择正确属性的方法。我的模型上有74个属性遵循以下命名约定:" item1a,item1b,item1c,item2a ..."。

在每个UISegmentedControl上,我都有一个属性" name",我可以在运行时提取,知道哪个控件应绑定到哪个属性。

我想做的基本上是

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int digit;
    struct node* next; 
};

void get_number(struct node** head);
int create_node(int digit, struct node** head);
void printlist(struct node* head);


int main()
{
    struct node* head1 = malloc(sizeof(struct node*));

    get_number(&head1);

    printlist(head1);

    return 0;   
}

int create_node(int digit, struct node** head)
{
    struct node* tmp = malloc(sizeof(struct node*));

    tmp -> digit = digit;
    tmp -> next = *head;

    *head = tmp;

}

void printlist(struct node* head)
{
    struct node* curr = head; 
    if(!head)
        return;

    while(curr != NULL )
    {
        printf("%d",curr -> digit);
        curr  = curr -> next;
    }
}   

void get_number(struct node** head)
{
    int k;
    char c;

    c = getchar();
    while(c != '\n' && c != ' ')
    {
        k = c - '0';
        create_node(k, head);
        c = getchar();
    }
}

我可以通过

获取动态属性名称的值
RACCHannelTerminal *modelTerminal = RACChannelTo(self, "DYNAMIC PROPERTY NAME");

但是这并没有给出要观察的实际属性,只是一个值。

有没有办法做所描述的事情?

1 个答案:

答案 0 :(得分:1)

从文档中 - RACChanelTo - 只是一个宏,您可以将其重写为

RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php
RewriteRule ^index\.php$ / [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule doctor-(.*)\.htm$ doctor-details.php?doc_id=$1
RewriteRule hospital-(.*)\.htm$ hospital_detail.php?hosp_spec_id=$1
RewriteRule hotel-(.*)\.htm$ hotel_details.php?hotel_id=$1
RewriteRule destination-(.*)\.htm$ destination_details.php?dest_id=$1
RewriteRule news-(.*)\.htm$ news-details.php?news_id=$1
RewriteRule article-(.*)\.htm$ articles-details.php?article=$1
RewriteRule service-(.*)\.htm$ service-details.php?service_id=$1
RewriteRule user-register.php$ register.php 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]
#adds ".php" to a URL that isn't a directory or a file
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*)$ $1.php

因此,不要使用RACChanelTo(,)使用

NSString *predString = [NSString stringWithFormat:@"(foodName BEGINSWITH[cd] '%@')", @"sa"];

NSPredicate *pred = [NSPredicate predicateWithFormat:predString];

NSArray *array = [arr filteredArrayUsingPredicate:pred];
NSLog(@"%@", array);

警告

来自Reactive Cocoa标题

  

///不要直接使用它。使用上面的RACChannelTo宏。

     

定义RACChannelTo_(TARGET,KEYPATH,NILVALUE)\

[[RACKVOChannel alloc] initWithTarget:<#(NSObject *)#> keyPath:<#(NSString *)#> nilValue:<#(id)#>]
     

nilValue:(NILVALUE)] [@ keypath(RACKVOChannel.new,followTerminal)]

希望这有助于你