最近,我一直在制作一个简单的iOS 8共享扩展来了解系统的工作原理.正如Apple在其App Extension编程指南中所述:
默认情况下,您的应用及其扩展程序无法直接访问彼此的容器.
这意味着扩展程序和包含应用程序不共享数据.但在同一页面上,Apple带来了一个解决方案:
如果您希望包含应用及其扩展能够共享数据,请使用Xcode或Developer门户为应用及其扩展启用应用组.接下来,在门户中注册应用程序组,并指定要在包含的应用程序中使用的应用程序组.
然后,可以使用NSUserDefaults在包含应用程序和扩展程序之间共享数据.这正是我想做的.但由于某种原因,它不起作用.
在同一页面中,Apple建议使用标准默认值:
var defaults = NSUserDefaults.standardUserDefaults()
Run Code Online (Sandbox Code Playgroud)
在WWDC演示文稿(217)中,他们提出了一个共同的方案:
var defaults = NSUserDefaults(suiteName: kDefaultsPackage)
Run Code Online (Sandbox Code Playgroud)
此外,我为包含应用目标和扩展目标的应用组启用了相同的应用组名称:

但所有这些设置都是无用的.我无法从扩展程序中检索存储在包含应用程序中的数据.就好像两个目标正在使用完全不同的NSUserDefaults存储.
所以,
我正在尝试使用此Apple示例代码中提供的KeychainWrapper类:https://developer.apple.com/library/content/samplecode/GenericKeychain/
在示例应用程序中,该类具有以下开始的init方法:
- (id)initWithIdentifier: (NSString *)identifier accessGroup:(NSString *) accessGroup;
{
if (self = [super init])
{
// Begin Keychain search setup. The genericPasswordQuery leverages the special user
// defined attribute kSecAttrGeneric to distinguish itself between other generic Keychain
// items which may be included by the same application.
genericPasswordQuery = [[NSMutableDictionary alloc] init];
[genericPasswordQuery setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass];
[genericPasswordQuery setObject:identifier forKey:(id)kSecAttrGeneric];
Run Code Online (Sandbox Code Playgroud)
在示例应用程序中,它使用两个值作为标识符字符串."密码"和"帐号".在我的代码中实现类时,我使用了一些自定义标识符,但代码不起作用.对SecItemAdd()的调用失败.经过一些测试后,似乎使用"密码"和"帐号"以外的值作为标识符不起作用.
有谁知道允许的值和/或是否可以为您的钥匙串项目设置自定义标识符?
我实现了iOS CoreBluetooth客户端和服务器来发送数据
client site
[self.connectedPeripheral writeValue:mainData forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
Run Code Online (Sandbox Code Playgroud)
和
- (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic
{
NSString *s= [[NSString alloc] initWithData:characteristic.value encoding:NSUTF8StringEncoding];
NSLog(@"didWriteValue characteristic.value: %@ ", s);
}
Run Code Online (Sandbox Code Playgroud)
和服务器站点
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
{
NSData *res= [[NSString stringWithFormat:@"Hello"] dataUsingEncoding:NSUTF8StringEncoding];
[self.peripheral updateValue:res
forCharacteristic:self.writeCharacteristic
onSubscribedCentrals:nil];
[peripheral respondToRequest:aReq withResult:CBATTErrorSuccess];
}
Run Code Online (Sandbox Code Playgroud)
但是,客户端无法接收任何数据.任何的想法?谢谢你的帮助.
我已经为iOS7开发了一款具有这种设计的应用程序

你可以看到我的所有BackButton都有一个蓝色箭头(使用UINavigationController和segues),我想把它们变成红色,这是我的代码:
[UIBarButtonItem appearance]setTintColor:(UIColorFromRGB(toolbarTintColor))];
[[UIBarButtonItem appearance]setTitleTextAttributes:textAtributesDictionaryNavBarButtons forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
但结果只适用于所有其他按钮,任何帮助,我会很感激
在此先感谢您的支持
子视图控制器的实现中的以下代码删除了子视图控制器:
- (void)commandFinishVC
{
[ self.view removeFromSuperview];
[ self removeFromParentViewController ];
}
Run Code Online (Sandbox Code Playgroud)
子视图控制器及其视图已成功删除,但父母如何通知此情况?-viewDidDisappear未被调用,并且已弃用-viewDidUnload.
从我可以找到的例子中,总是假设父视图控制器是提名被删除的孩子的事件的发起者,但是(对我来说)孩子应该在其完成的逻辑中是自主的.
是否应该通过利用self.parentViewController属性并在父视图控制器中使用类似以下内容来调用remove方法?
- (void)commandFinishVC
{
[ childVC.view removeFromSuperview];
[ childVC removeFromParentViewController ];
}
Run Code Online (Sandbox Code Playgroud) 我的应用启动图像有问题.在开发的早期,我添加了一个示例图像作为启动图像.现在,当应用程序准备发布时,我无法更改启动映像.
我尝试在项目摘要中的xcode中更改它,从项目文件中删除文件,并用正确名称替换新图像的文件.没运气.它仍然在所有设备上显示错误.
我甚至没有项目中的图像了.
这里有谁知道什么是错的,或者经历过这样的事情?
发布图片适用于iPhone和iPad,肖像.
我正在玩UI按钮,只是为了了解可以用它们做些什么.到目前为止我只有一个问题:
如何修改 UIButton的位置?
- (IBAction)buttonClicked:(id)sender
{
UIButton *senderB = sender;
CGPoint position = senderB.frame.origin;
CGSize size = senderB.frame.size;
senderB.frame = CGRectMake(position.x,position.y + 10,size.width,size.height);
}
Run Code Online (Sandbox Code Playgroud)
上面的工作很好,但是,每次我想简单地改变一个时创建一个新的CGrect对我来说似乎相当低效.
有没有办法让我直接设置senderB.frame.origin.x等的值?
我无法解决这个问题,因为无论我做什么让我的问题得以解决,我都会遇到这个问题
继承人的踪迹
$0 = 0x1f8f9a10 (
0 ??? 0x02b04144 0x0 + 45105476,
1 TheAppName 0x001016e0 start + 0,
2 Foundation 0x34334599 + 72,
3 WebCore 0x399e7bfb + 82,
4 UIKit 0x3595b493 + 182,
5 UIKit 0x358d7d1f + 382,
6 UIKit 0x358d7d33 + 402,
7 UIKit 0x358d7d33 + 402,
8 UIKit 0x358d7431 + 360,
9 UIKit 0x358d72c3 + 30,
10 UIKit 0x35ce2fef + 386,
11 UIKit 0x35ce3879 + 464,
12 UIKit 0x35ce63d3 + 698,
13 UIKit 0x35ce5e49 + 552,
14 UIKit …Run Code Online (Sandbox Code Playgroud)