小编Tre*_*man的帖子

Storyboard登录屏幕的最佳做法,在注销时处理数据清除

我正在使用Storyboard构建iOS应用程序.根视图控制器是一个标签栏控制器.我正在创建登录/注销过程,它基本上工作正常,但我有一些问题.我需要知道设置这一切的最好方法.

我想完成以下任务:

  1. 首次启动应用程序时显示登录屏幕.登录后,转到选项卡栏控制器的第一个选项卡.
  2. 任何时候他们在此之后启动应用程序,检查他们是否已登录,并直接跳到根选项卡栏控制器的第一个选项卡.
  3. 当他们手动单击注销按钮时,显示登录屏幕,并清除视图控制器中的所有数据.

到目前为止我所做的是将根视图控制器设置为Tab Bar Controller,并为我的Login视图控制器创建了一个自定义segue.在我的Tab Bar Controller类中,我检查它们是否在viewDidAppear方法内登录,然后执行segue:[self performSegueWithIdentifier:@"pushLogin" sender:self];

我还设置了需要执行注销操作的通知: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(logoutAccount) name:@"logoutAccount" object:nil];

注销后,我清除Keychain中的凭据,运行[self setSelectedIndex:0]并执行segue以再次显示登录视图控制器.

这一切都很好,但我想知道:这个逻辑应该在AppDelegate吗?我还有两个问题:

  • 第一次启动应用程序时,Tab Bar Controller会在执行segue之前短暂显示.我已经尝试过移动代码viewWillAppear但是segue不会那么早.
  • 当他们注销时,所有数据仍然在所有视图控制器中.如果他们登录到新帐户,旧帐户数据仍会显示,直到刷新为止.我需要一种方法在注销时轻松清除它.

我愿意改变它.我已经考虑将登录屏幕设置为根视图控制器,或者在AppDelegate中创建导航控制器来处理所有事情......我只是不确定此时最好的方法是什么.

login clear logout ios uistoryboard

285
推荐指数
8
解决办法
11万
查看次数

如何锁定textarea的第一个单词?

基本上我需要创建一个字符有限的textarea,但在开头只有一个单词,它们不能改变.

它需要是textarea的一部分,但我不希望用户能够删除它或编辑它.

我以为我可以创建一个JQuery函数blur()来防止用户退格,但我还需要阻止他们选择该单词并删除它.

更新 我写了这个看起来很棒的JQuery!但是我喜欢下面的解决方案,因为它不需要Javascript.

<script type="text/javascript">
    var $el = $("textarea#message_create_body");
    $el.data('oldVal', $el.val());

    $el.bind('keydown keyup keypress', function () {
        var header = "Header: ";
        var $this = $(this);
        $this.data('newVal', $this.val());
        var newValue = $this.data("newVal");
        var oldValue = $this.data("oldVal");

        // Check to make sure header not removed
        if (!(newValue.substr(0, header.length) === header)) {
            $(this).val(oldValue);
        } else {
            $(this).data('oldVal', $(this).val());
        }
    });
</script>
Run Code Online (Sandbox Code Playgroud)

javascript jquery textarea focus

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

根据Wordpress中的自定义字段值批量重写post slugs

基本上我有一个名为"Parts"的自定义帖子类型设置,目前有超过5,000个帖子.每个部件都有许多自定义字段,包括"部件号".目前,每个部分的URL是:

http://site.com/parts/name-of-part/

我宁愿拥有的是:

http://site.com/parts/XXXX-608-AB/(这是一个部件号,存储为自定义字段"partno".)

我相信我需要做两件事:

1)根据自定义字段"partno"制作一个脚本,以批量编辑每个现有部件的所有slug.

2)连接到Wordpress函数以触发它始终根据自定义字段"partno"为新零件创建slug.

有没有人知道如何完成这些方面中的一个或两个?

更新:以下是我最终用于更改现有帖子的代码

// Set max posts per query
$max = 500;
$total = 5000; 

for($i=0;$i<=$total;$i+=$max) {

$parts = get_posts(array('post_type' => 'parts', 'numberposts' => $max, 'offset' => $i));

    // loop through every part
    foreach ( $parts as $part ) {

    // get part number
    $partno = get_post_meta( $part->ID, 'partno', true );   

    $updated_post = array();
    $updated_post['ID'] = $part->ID;
    $updated_post['post_name'] = $partno;
    wp_update_post( $updated_post ); // update existing posts
    echo $part->ID;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:以下是我在functions.php中用来更改正在发布的帖子的代码 (部分归功于 …

php wordpress slug custom-fields custom-post-type

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

在单例中安全清除数据的最佳方法?

我正在使用一个名为CSAppData我的iPhone应用程序存储数据的单例.我正在存储一个CSInbox在单例中调用的对象.当我注销我的应用程序时,我想清除该对象的数据.

这是我的单例代码,包括清除数据的方法:

- (id)init {
    self = [super init];
    if (self)
    {
        self.inbox = [[CSInbox alloc] init];
    }
    return self;
}

+ (CSAppData *)appData {
    static CSAppData * appDataInstance;
    @synchronized(self) {
        if(!appDataInstance) {
            appDataInstance = [[CSAppData alloc] init];
        }
    }
    return appDataInstance;
}

+(void) clearData {
    CSAppData *appData = [CSAppData appData];
    appData.inbox = [[CSInbox alloc] init];
}
Run Code Online (Sandbox Code Playgroud)

但是,在我的一个视图控制器中,在initWithCoder方法中,我存储了收件箱变量:

-(id) initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if(self) {
        self.inbox = [[CSAppData appData] inbox];
    } …
Run Code Online (Sandbox Code Playgroud)

singleton objective-c ios

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