Save and Load Data on Today Extensions (iOS 8)

ⅰ亾dé卋堺 提交于 2019-11-29 10:18:14
BenjG37

You need to use app group identifier instead of com.* For instance:

NSUserDefaults *shared = [[NSUserDefaults alloc]initWithSuiteName:@"group.company.appgroup"];

Don't forget to synchronise when you store data

[shared synchronize];

You need to add the App Group stuff detailed under here and then if it actually worked (pretty iffy under beta) it should allow you to share NSUserDefault data like normal between the host and widget.

Edit: Normal NSUserDefaults does not work. Apple has implemented a new method. To use, simply redefine your NSUserDefaults instance like this:

NSUserDefaults *shared = [[NSUserDefaults alloc]initWithSuiteName:@"com.you.app.container"];

For anyone wondering how in the world do you save and get values then look at this code.

In your regular app add this to save whatever you like in your *.m file.

NSUserDefaults *shared = [[NSUserDefaults alloc]initWithSuiteName:@"group.yourcompanyname.TodayExtensionSharingDefaults"];

    //save dic
    [shared setObject:dictionary2 forKey:@"dicForTodayWidget"];

    //save array
    [shared setObject:tempArray2 forKey:@"arrayForTodayWidget"];

    //save some value
    [shared setObject:@"1234" forKey:@"myValForTodayWidget"];

    [shared synchronize];

In your today widget under TodayViewController.m in viewDidLoad add this.

NSUserDefaults *shared = [[NSUserDefaults alloc]initWithSuiteName:@"group.yourcompanyname.TodayExtensionSharingDefaults"];

    //get dic
    NSMutableDictionary *dictionary = [shared objectForKey:@"dicForTodayWidget"];

You first need the App Groups set up for both targets (application and the extension).

Then, use the

NSUserDefaults *shared = [[NSUserDefaults alloc]initWithSuiteName:@"group.company.myapp"];

to obtain the defaults object which you can read from/write to as usual.

If you want to be notified of changes to the defaults, use the NSUserDefaultsDidChangeNotification in your widget (or app).

For a step-by-step tutorial explaining all this, take a look at this blog post.

@edukulele Today Extension and Main app run on two processes. Today Extension can't receive NSUserDefaultsDidChangeNotifications. I tried use MMWormhole. It is very good.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!