有时,当我在Xcode上运行设备上的应用程序时,我会尝试访问密钥链但由于错误-34018而失败.这与任何记录的钥匙串错误代码都不匹配,并且无法一致地再现.(可能有30%的时间发生,我不清楚为什么会发生这种情况).使调试这个问题变得非常困难的原因是完全缺乏文档.知道是什么导致这个以及如何解决它?我正在使用Xcode 5并在设备上运行iOS 7.0.4.
这里有一个公开的问题:https://github.com/soffes/sskeychain/issues/52
编辑:每个请求添加钥匙串访问代码
我正在使用该SSKeychain库与钥匙串连接.这是片段.
#define SERVICE @"default"
@implementation SSKeychain (EXT)
+ (void)setValue:(NSString *)value forKey:(NSString *)key {
NSError *error = nil;
BOOL success = NO;
if (value) {
success = [self setPassword:value forService:SERVICE account:key error:&error];
} else {
success = [self deletePasswordForService:SERVICE account:key error:&error];
}
NSAssert(success, @"Unable to set keychain value %@ for key %@ error %@", value, key, error);
if (!success) {
LogError(@"Unable to set value to keychain %@", error);
}
LogTrace(@"Will set …Run Code Online (Sandbox Code Playgroud) 我正在使用领域(目前为0.85.0),我的应用程序使用数据库来存储用户特定的数据,例如当前用户的联系人.当用户决定退出时,我需要删除关于用户的每一点信息,在我看来,最明显,简单和干净的东西将是擦除整个领域.不幸的是,Cocoa lib没有提供该功能.
目前,我坚持以下
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm deleteObjects:[MyRealmClass1 allObjectsInRealm:realm]];
[realm deleteObjects:[MyRealmClass2 allObjectsInRealm:realm]];
[realm deleteObjects:[MyRealmClass3 allObjectsInRealm:realm]];
[realm commitWriteTransaction];
Run Code Online (Sandbox Code Playgroud)
任何更好的想法?
谢谢
我使用Swift转换Keychain查询结果.
我的请求似乎正在起作用:
let queryAttributes = NSDictionary(objects: [kSecClassGenericPassword, "MyService", "MyAccount", true],
forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecReturnData])
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
var dataTypeRef : Unmanaged<AnyObject>?
let status = SecItemCopyMatching(queryAttributes, &dataTypeRef);
let retrievedData : NSData = dataTypeRef!.takeRetainedValue() as NSData
*** ^^^^can't compile this line^^^^
})
Run Code Online (Sandbox Code Playgroud)
我的问题是,代码无法编译:
Bitcast requires both operands to be pointer or neither
%114 = bitcast %objc_object* %113 to %PSs9AnyObject_, !dbg !487
Bitcast requires both operands to be pointer or neither
%115 = bitcast %PSs9AnyObject_ %114 to i8*, !dbg !487
LLVM …Run Code Online (Sandbox Code Playgroud) 我正在浏览寻找一个解决方案,在我的一个应用程序中实现一个小型离线数据存储,这将很容易和快速使用.无论如何,我遇到了Realm这样做.但是,我遇到的问题是,每次启动应用程序时,数据库中的内容都为空.
我做了所有的分配并调用了beginWriteTransaction方法.设置我的数据库变量值.然后,我将对象添加到领域,最后是commitWriteTransaction.
所以,我做一个NSLog来查看该值是否实际设置正确(在我的应用程序中更新之后).但是当我关闭我的应用程序或停止并在xcode iphone5模拟器中再次运行它.我尝试在viewDidLoad方法中设置数据库中的值到我的应用程序中的全局变量.我执行的NSLog来检查值是在我的数据库或全局变量,但它显示为空,也没有得到店/保存的意义.
这是代码..
@interface iReceiptDataBase : RLMObject
@property NSString* receiptNo;
@end
RLM_ARRAY_TYPE(iReceiptDataBase)
@implementation iReceiptDataBase
@end
//******** View Controller Implementation ************
- (void)viewDidLoad {
self.realm = [RLMRealm defaultRealm]; // property type RLMRealm
[realm beginWriteTransaction];
self.myDataBase = [[iReceiptDataBase alloc] init]; // property type iReceiptDataBase
receiptNumber = [myDataBase.receiptNo intValue];
NSLog(@"In my realm database(first call) -> %@", myDataBase.receiptNo);
NSLog(@"In my local app(first call) -> %d", receiptNumber);
}
-(void)drawPDF:(NSString*)fName {
receiptNumber += 1; …Run Code Online (Sandbox Code Playgroud) 我正在使用Realm进行一个简单的小项目.我正在使用最新版本的框架(昨天从Github编译)和当前AppStore版本的Xcode和Swift 2.1.
我正在通过segue将Realm数据库对象从一个视图控制器移交给另一个视图控制器prepareForSegue(),以便对其进行编辑(并填写当前值).
不知何故,目标视图控制器中的对象似乎存在问题.当我只是print()目标视图控制器中的对象(在viewDidLoad()我计划使用它的任何方法中)时,对象在控制台中正确显示,如下所示:
Object {
name = asdf
value = 8
}
Run Code Online (Sandbox Code Playgroud)
等等.
如果我尝试访问这些值(即使在上一行或下一行中)并将它们分配给另一个变量,就像myValue = objectToEdit.value我得到0一样.
通过使用断点调试代码来显示调试器中的对象,其中所有值为空("")或0,具体取决于类型.不过,不管怎么说,Strings因为某些原因被抓出来了,我可以访问并打印它们myString = objectToEdit.name,而调试器显示name = (String) "",声称它是空的.
当我在第一个视图中从数据库中获取数据库对象时,已经发生了相同的行为.直接的想法是,值确实为0并且只保存了字符串,但print()方法另有说法.
任何人都可以解释这种奇怪的行为,也许可以告诉我哪些地方忽略了什么?我现在怀疑这是框架的一些内部问题,但我不确定.如果需要,我当然会更新代码或回答问题.