我刚发现我的应用程序有一个有趣的问题.在应用程序中,我将用户的用户名和密码保存到钥匙串.
keychainWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyLoginPassword" accessGroup:nil];
[keychainWrapper setObject:usernameField.text forKey:(id)kSecAttrAccount];
[keychainWrapper setObject:passwordField.text forKey:(id)kSecValueData];
Run Code Online (Sandbox Code Playgroud)
当这个代码在Debug中运行时,似乎工作正常.它每次都会更新,之后我可以从钥匙串中检索这些项目.当它在Distribution中运行时,钥匙串永远不会更新.我已经验证了这两行代码都会遇到这些代码行.我正在使用Xcode 4.2和iOS5 SDK,并在安装了iOS5的iPad 2上运行应用程序.
我是核心数据的新手,所以如果我弄错了一些条款,请原谅.
我的xcdatamodel文件中有几个对象.它们都与关系和反向关系相互关联.如果我使用以下代码连接其中两个对象,则不设置反向关系.
[managedObj1 setValue: managedObj2 forKey:@"relatiohipName"];
Run Code Online (Sandbox Code Playgroud)
我似乎必须使用以下代码手动设置反向关系
[managedObj1 setValue: managedObj2 forKey:@"relatiohipName"];
[managedObj2 setValue: managedObj1 forKey:@"inverseRelatiohipName"];
Run Code Online (Sandbox Code Playgroud)
这似乎对我来说是错误的,但它是我能够使机制发挥作用的唯一方法.我在运行第一个代码块之后查看了sqlite数据库并且没有填充反向关系,但如果我运行第二个代码,那么关系就在那里.
而且,似乎一旦我在Core Data中创建了一个对象,我就无法在之后改变它.dp保持不变.一旦我退出应用程序并重新启动它,我似乎失去了对象的所有关系和属性.我的代码中生成的对象只有nil成员变量.
编辑:
注释掉的东西是之前完成的方式,未注释的东西就是我现在没有运气的方式.
这是我创建对象的地方:
NSEntityDescription* mobileEntity = [NSEntityDescription entityForName:@"WebServiceAuthService_mobileAdvertisementVO" inManagedObjectContext:managedObjectContext];
WebServiceAuthService_mobileAdvertisementVO *newObject = [NSEntityDescription insertNewObjectForEntityForName:[mobileEntity name] inManagedObjectContext:managedObjectContext];
//WebServiceAuthService_mobileAdvertisementVO *newObject = [NSEntityDescription insertNewObjectForEntityForName:@"WebServiceAuthService_mobileAdvertisementVO" inManagedObjectContext:managedObjectContext];
Run Code Online (Sandbox Code Playgroud)
这是我分配其中一个对象成员变量的地方:
[self setValue:newChild forKey:@"advertisement"];
//self.advertisement = newChild;
Run Code Online (Sandbox Code Playgroud)
这是我保存上下文的地方:
NSError *error = nil;
if (managedObjectContext != nil)
{
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
{
DLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
Run Code Online (Sandbox Code Playgroud)