浏览代码

Run on background thread

Changed methods in CDVKeychain.m to all run in a background thread
because I would constantly get thread warnings since each operation
takes about 10-30ms.
Jamie Perkins 11 年之前
父节点
当前提交
eec9cc17f1
共有 1 个文件被更改,包括 71 次插入64 次删除
  1. 71 64
      src/ios/CDVKeychain.m

+ 71 - 64
src/ios/CDVKeychain.m

@@ -31,88 +31,95 @@
     return self;
 }
 
+
 - (void) getForKey:(CDVInvokedUrlCommand*)command
 {
-    NSArray* arguments = command.arguments;
-    CDVPluginResult* pluginResult = nil;
-    
-    if ([arguments count] >= 2)
-    {
-        NSString* key = [arguments objectAtIndex:0];
-        NSString* serviceName = [arguments objectAtIndex:1];
-        NSError* error = nil;
+    [self.commandDelegate runInBackground:^{
+        NSArray* arguments = command.arguments;
+        CDVPluginResult* pluginResult = nil;
         
-        NSString* value = [SFHFKeychainUtils getPasswordForUsername:key andServiceName:serviceName error:&error];
-        if (error == nil && value != nil) {
-            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:value];
-        } else {
+        if ([arguments count] >= 2)
+        {
+            NSString* key = [arguments objectAtIndex:0];
+            NSString* serviceName = [arguments objectAtIndex:1];
+            NSError* error = nil;
+            
+            NSString* value = [SFHFKeychainUtils getPasswordForUsername:key andServiceName:serviceName error:&error];
+            if (error == nil && value != nil) {
+                pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:value];
+            } else {
+                pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
+                                                 messageAsString:[NSString stringWithFormat:@"error retrieving value for key '%@' : %@", key, [error localizedDescription]]];
+            }
+        }
+        else
+        {
             pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
-                                             messageAsString:[NSString stringWithFormat:@"error retrieving value for key '%@' : %@", key, [error localizedDescription]]];
+                                             messageAsString:@"incorrect number of arguments for getForkey"];
         }
-    }
-    else
-    {
-        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
-                                         messageAsString:@"incorrect number of arguments for getForkey"];
-    }
-    
-    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+        
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }];
 }
 
 - (void) setForKey:(CDVInvokedUrlCommand*)command
 {
-    NSArray* arguments = command.arguments;
-    CDVPluginResult* pluginResult = nil;
-    
-    if ([arguments count] >= 3)
-    {
-        NSString* key = [arguments objectAtIndex:0];
-        NSString* serviceName = [arguments objectAtIndex:1];
-        NSString* value = [arguments objectAtIndex:2];
-        NSError* error = nil;
+    [self.commandDelegate runInBackground:^{
+        NSArray* arguments = command.arguments;
+        CDVPluginResult* pluginResult = nil;
         
-        BOOL stored = [SFHFKeychainUtils storeUsername:key andPassword:value forServiceName:serviceName updateExisting:YES error:&error];
-        if (stored && error == nil) {
-            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
-        } else {
-            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:[error localizedDescription]];
+        if ([arguments count] >= 3)
+        {
+            NSString* key = [arguments objectAtIndex:0];
+            NSString* serviceName = [arguments objectAtIndex:1];
+            NSString* value = [arguments objectAtIndex:2];
+            NSError* error = nil;
+            
+            BOOL stored = [SFHFKeychainUtils storeUsername:key andPassword:value forServiceName:serviceName updateExisting:YES error:&error];
+            if (stored && error == nil) {
+                pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+            } else {
+                pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:[error localizedDescription]];
+            }
+        }
+        else
+        {
+            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
+                                             messageAsString:@"incorrect number of arguments for setForKey"];
         }
-    }
-    else
-    {
-        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
-                                         messageAsString:@"incorrect number of arguments for setForKey"];
-    }
 
-    
-    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+        
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }];
 }
 
 - (void) removeForKey:(CDVInvokedUrlCommand*)command
 {
-    NSArray* arguments = command.arguments;
-    CDVPluginResult* pluginResult = nil;
-    
-    if ([arguments count] >= 2)
-    {
-        NSString* key = [arguments objectAtIndex:0];
-        NSString* serviceName = [arguments objectAtIndex:1];
-        NSError* error = nil;
+    [self.commandDelegate runInBackground:^{
+        NSArray* arguments = command.arguments;
+        CDVPluginResult* pluginResult = nil;
         
-        BOOL deleted = [SFHFKeychainUtils deleteItemForUsername:key andServiceName:serviceName error:&error];
-        if (deleted && error == nil) {
-            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
-        } else {
-            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:[error localizedDescription]];
+        if ([arguments count] >= 2)
+        {
+            NSString* key = [arguments objectAtIndex:0];
+            NSString* serviceName = [arguments objectAtIndex:1];
+            NSError* error = nil;
+            
+            BOOL deleted = [SFHFKeychainUtils deleteItemForUsername:key andServiceName:serviceName error:&error];
+            if (deleted && error == nil) {
+                pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+            } else {
+                pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:[error localizedDescription]];
+            }
         }
-    }
-    else
-    {
-        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
-                                         messageAsString:@"incorrect number of arguments for removeForKey"];
-    }
-    
-    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+        else
+        {
+            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
+                                             messageAsString:@"incorrect number of arguments for removeForKey"];
+        }
+        
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }];
 }