rhodes 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. data/CHANGELOG +10 -0
  2. data/lib/framework/rho/rhoerror.rb +4 -0
  3. data/lib/framework/rhodes.rb +2 -2
  4. data/lib/framework/rhom/rhom.rb +21 -1
  5. data/lib/framework/version.rb +2 -2
  6. data/lib/rhodes.rb +2 -2
  7. data/platform/android/Rhodes/AndroidManifest.xml +2 -2
  8. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +21 -6
  9. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesInstance.java +1 -1
  10. data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +10 -0
  11. data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +1 -1
  12. data/platform/bb/rhodes/src/com/rho/rubyext/GeoLocation.java +2 -2
  13. data/platform/bb/rhodes/src/rhomobile/PushListeningThread.java +4 -2
  14. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +52 -11
  15. data/platform/iphone/Classes/NativeBar.m +37 -18
  16. data/platform/iphone/Classes/Rhodes.h +2 -0
  17. data/platform/iphone/Classes/Rhodes.m +27 -8
  18. data/platform/iphone/Classes/SimpleMainView.h +7 -5
  19. data/platform/iphone/Classes/SimpleMainView.m +155 -36
  20. data/platform/iphone/Classes/TabbedMainView.h +2 -4
  21. data/platform/iphone/Classes/TabbedMainView.m +12 -10
  22. data/platform/iphone/Classes/WebView.m +1 -0
  23. data/platform/iphone/Info.plist +7 -1
  24. data/platform/iphone/icon114.png +0 -0
  25. data/platform/iphone/icon57.png +0 -0
  26. data/platform/iphone/icon72.png +0 -0
  27. data/platform/iphone/rbuild/iphone.rake +102 -16
  28. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +12 -0
  29. data/platform/shared/common/IRhoThreadImpl.h +1 -1
  30. data/platform/shared/common/PosixThreadImpl.cpp +17 -22
  31. data/platform/shared/common/PosixThreadImpl.h +1 -1
  32. data/platform/shared/common/RhoThread.cpp +7 -3
  33. data/platform/shared/common/RhoThread.h +21 -7
  34. data/platform/shared/common/RhodesApp.cpp +13 -9
  35. data/platform/shared/common/RhodesApp.h +1 -1
  36. data/platform/shared/common/ThreadQueue.cpp +6 -4
  37. data/platform/shared/rubyJVM/src/com/rho/IRhoRubyHelper.java +2 -0
  38. data/platform/shared/rubyJVM/src/com/rho/RhoThread.java +18 -8
  39. data/platform/shared/rubyJVM/src/com/rho/RhodesApp.java +70 -2
  40. data/platform/shared/rubyJVM/src/com/rho/ThreadQueue.java +143 -0
  41. data/platform/shared/rubyJVM/src/com/rho/sync/ClientRegister.java +15 -5
  42. data/platform/shared/rubyJVM/src/com/rho/sync/SyncEngine.java +42 -36
  43. data/platform/shared/rubyJVM/src/com/rho/sync/SyncNotify.java +63 -20
  44. data/platform/shared/rubyJVM/src/com/rho/sync/SyncSource.java +4 -4
  45. data/platform/shared/rubyJVM/src/com/rho/sync/SyncThread.java +12 -2
  46. data/platform/shared/rubyJVM/src/com/xruby/runtime/lang/RhoSupport.java +9 -3
  47. data/platform/shared/sync/ClientRegister.cpp +11 -3
  48. data/platform/shared/sync/ClientRegister.h +1 -0
  49. data/platform/shared/sync/SyncEngine.cpp +38 -35
  50. data/platform/shared/sync/SyncEngine.h +2 -1
  51. data/platform/shared/sync/SyncNotify.cpp +53 -20
  52. data/platform/shared/sync/SyncNotify.h +9 -2
  53. data/platform/shared/sync/SyncSource.cpp +3 -3
  54. data/platform/shared/sync/SyncSource.h +1 -1
  55. data/platform/shared/sync/SyncThread.cpp +9 -2
  56. data/platform/wm/rhodes/Alert.cpp +35 -21
  57. data/platform/wm/rhodes/Alert.h +11 -2
  58. data/platform/wm/rhodes/rho/common/RhoThreadImpl.cpp +11 -12
  59. data/platform/wm/rhodes/rho/common/RhoThreadImpl.h +2 -0
  60. data/res/generators/templates/application/build.yml +1 -1
  61. data/rhodes.gemspec +2 -2
  62. data/spec/framework_spec/rhoconfig.txt +1 -0
  63. data/spec/phone_spec/rhoconfig.txt +2 -0
  64. metadata +8 -5
  65. data/Manifest.txt +0 -5333
@@ -58,6 +58,8 @@
58
58
  - (void)playStart:(NSString*)fileName mediaType:(NSString*)type;
59
59
  - (void)playStop;
60
60
 
61
+ - (void)hideSplash;
62
+
61
63
  - (void)setCookie:(NSString*)cookie forUrl:(NSString*)url;
62
64
  - (NSString*)cookie:(NSString*)url;
63
65
 
@@ -113,6 +113,7 @@ static Rhodes *instance = NULL;
113
113
  }
114
114
 
115
115
  - (void)openMapLocation:(NSString*)query {
116
+ [self hideSplash];
116
117
  NSURL* url = [NSURL URLWithString:[@"http://maps.google.com/?" stringByAppendingString:query]];
117
118
  [[UIApplication sharedApplication] openURL:url];
118
119
  }
@@ -168,6 +169,7 @@ static Rhodes *instance = NULL;
168
169
  }
169
170
 
170
171
  - (void)chooseDateTime:(DateTime*)dateTime {
172
+ [self hideSplash];
171
173
  dateTimePickerDelegate.dateTime = dateTime;
172
174
  [dateTimePickerDelegate setPostUrl:dateTime.url];
173
175
  //[self normalizeUrl:dateTime.url]];
@@ -181,6 +183,7 @@ static Rhodes *instance = NULL;
181
183
  -(BOOL)startCameraPicker:(PickImageDelegate*)delegateObject
182
184
  sourceType:(UIImagePickerControllerSourceType)type
183
185
  {
186
+ [self hideSplash];
184
187
  #ifndef __IPHONE_3_0
185
188
  if ( (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) ||
186
189
  (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) ||
@@ -242,16 +245,21 @@ static Rhodes *instance = NULL;
242
245
  return window;
243
246
  }
244
247
 
245
- - (void)setMainView:(id<RhoMainView,NSObject>)view {
246
- if (mainView == view)
247
- return;
248
-
248
+ - (void)hideSplash {
249
249
  if (splashViewController) {
250
250
  [splashViewController hideSplash];
251
251
  [splashViewController release];
252
252
  splashViewController = nil;
253
253
  }
254
+ }
255
+
256
+ - (void)setMainView:(id<RhoMainView,NSObject>)view {
257
+ if (mainView == view)
258
+ return;
259
+
260
+ [self hideSplash];
254
261
 
262
+ [mainView.view removeFromSuperview];
255
263
  [mainView release];
256
264
  mainView = [view retain];
257
265
  [window addSubview:mainView.view];
@@ -277,6 +285,8 @@ static Rhodes *instance = NULL;
277
285
  NSError *err;
278
286
  NSString *data = [NSString stringWithContentsOfFile:htmPath encoding:NSUTF8StringEncoding error:&err];
279
287
  [mainView loadHTMLString:data];
288
+ rho_splash_screen_start();
289
+
280
290
  }
281
291
  }
282
292
 
@@ -297,12 +307,21 @@ static Rhodes *instance = NULL;
297
307
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:NO];
298
308
 
299
309
  window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
300
- [window makeKeyAndVisible];
310
+ window.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
311
+ window.autoresizesSubviews = YES;
312
+
301
313
 
302
314
  mainView = nil;
303
315
  self.mainView = [[SimpleMainView alloc] initWithParentView:window frame:[Rhodes applicationFrame]];
316
+ mainView.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
317
+ mainView.view.autoresizesSubviews = YES;
318
+
319
+ [window makeKeyAndVisible];
320
+
321
+ [window addSubview:mainView.view];
322
+
304
323
  [self showLoadingPage];
305
-
324
+
306
325
  cookies = [[NSMutableDictionary alloc] initWithCapacity:0];
307
326
 
308
327
  // Init controllers
@@ -359,14 +378,14 @@ static Rhodes *instance = NULL;
359
378
 
360
379
  NSDictionary *aps = [userInfo objectForKey:@"aps"];
361
380
  if (aps) {
362
- NSString *alert = [aps objectForKey:@"alert"];
381
+ NSString *alert = [aps objectForKey:@"show_popup"];
363
382
  if (alert && [alert length] > 0) {
364
383
  NSLog(@"Push Alert: %@", alert);
365
384
  rho_param *p = rho_param_str((char*)[alert UTF8String]);
366
385
  [RhoAlert showPopup:p];
367
386
  rho_param_free(p);
368
387
  }
369
- NSString *sound = [aps objectForKey:@"sound"];
388
+ NSString *sound = [aps objectForKey:@"play_file"];
370
389
  if (sound && [sound length] > 0) {
371
390
  NSLog(@"Sound file name: %@", sound);
372
391
  [RhoAlert playFile:[@"/public/alerts/" stringByAppendingPathComponent:sound] mediaType:NULL];
@@ -10,17 +10,19 @@
10
10
  #import "RhoMainView.h"
11
11
 
12
12
  @interface SimpleMainView : UIViewController <RhoMainView, UIWebViewDelegate> {
13
- UIView *parent;
14
- UIView *root;
13
+
15
14
  UIWebView *webView;
16
15
  UIToolbar *toolbar;
17
16
  UINavigationBar *navbar;
18
17
  }
19
18
 
20
- @property (retain) UIView *root;
21
19
 
22
- - (id)initWithMainView:(id<RhoMainView>)v;
23
- - (id)initWithMainView:(id<RhoMainView>)v toolbar:(NSArray*)items;
20
+ - (id)initWithMainView:(id<RhoMainView>)v parent:(UIWindow*)p;
21
+ - (id)initWithMainView:(id<RhoMainView>)v parent:(UIWindow*)p toolbar:(NSArray*)items;
24
22
  - (id)initWithParentView:(UIView *)p frame:(CGRect)frame;
25
23
 
24
+ - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;
25
+ - (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
26
+ - (void)loadView;
27
+
26
28
  @end
@@ -57,7 +57,6 @@
57
57
 
58
58
  @implementation SimpleMainView
59
59
 
60
- @synthesize root;
61
60
 
62
61
  - (UIBarButtonItem*)newButton:(NSString*)url label:(NSString*)label icon:(NSString*)icon {
63
62
  UIImage *img = nil;
@@ -132,7 +131,7 @@
132
131
  }
133
132
 
134
133
  UIToolbar *tb = [UIToolbar new];
135
- tb.barStyle = UIBarStyleBlackOpaque;
134
+ tb.barStyle = UIBarStyleBlack;//Opaque;
136
135
 
137
136
  [tb sizeToFit];
138
137
 
@@ -177,6 +176,10 @@
177
176
 
178
177
  tb.hidden = NO;
179
178
  tb.userInteractionEnabled = YES;
179
+ tb.autoresizesSubviews = YES;
180
+ tb.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;
181
+
182
+
180
183
  return tb;
181
184
  }
182
185
 
@@ -199,13 +202,18 @@
199
202
  return;
200
203
 
201
204
  CGRect wFrame = webView.frame;
205
+ wFrame.size.height += wFrame.origin.y;
206
+ wFrame.origin.y = 0;
202
207
 
203
208
  [toolbar removeFromSuperview];
204
209
  toolbar = [self newToolbar:items frame:wFrame];
205
210
  toolbar.tag = RHO_TAG_TOOLBAR;
211
+ UIView* root = self.view;
206
212
  [root addSubview:toolbar];
213
+ [toolbar release];
207
214
 
208
215
  CGRect tbFrame = toolbar.frame;
216
+ wFrame = webView.frame;
209
217
  wFrame.size.height -= tbFrame.size.height;
210
218
  webView.frame = wFrame;
211
219
  }
@@ -218,35 +226,145 @@
218
226
  w.autoresizesSubviews = YES;
219
227
  w.clipsToBounds = NO;
220
228
  w.dataDetectorTypes = UIDataDetectorTypeNone;
221
- w.delegate = self;
229
+ //w.delegate = self;
230
+ w.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
222
231
  w.tag = RHO_TAG_WEBVIEW;
223
232
 
224
233
  return w;
225
234
  }
226
235
 
227
236
  - (id)init:(UIView*)p webView:(UIWebView*)w frame:(CGRect)frame toolbar:(NSArray*)items {
228
- parent = p;
229
-
230
- root = [[UIView alloc] initWithFrame:frame];
237
+ [self init];
238
+
239
+ UIView* root = self.view;
240
+ root.frame = frame;
231
241
  root.userInteractionEnabled = YES;
232
-
242
+ root.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
243
+ root.autoresizesSubviews = YES;
244
+
233
245
  [webView removeFromSuperview];
234
246
  webView = w;
235
247
  if (!webView)
236
248
  webView = [self newWebView:frame];
237
249
  [root addSubview:webView];
238
- CGRect wFrame = frame;
250
+ [webView release];
251
+ CGRect wFrame = frame;
239
252
  wFrame.origin.y = 0;
240
253
  webView.frame = wFrame;
241
254
 
242
255
  [self addToolbar:items];
243
256
  navbar = nil;
244
257
 
245
- self.view = root;
246
-
247
258
  return self;
248
259
  }
249
260
 
261
+
262
+ - (void)loadView {
263
+ UIView* content = [[UIView alloc] init];
264
+ //content.backgroundColor = [UIColor redColor];
265
+ self.view = content;
266
+ [content release];
267
+
268
+ }
269
+
270
+
271
+ - (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
272
+ {
273
+ if ([self interfaceOrientation] == fromInterfaceOrientation) {
274
+ return;
275
+ }
276
+ int width = rho_sys_get_screen_width();
277
+ int height = rho_sys_get_screen_height();
278
+ // send after rotate message
279
+ //CGRect wFrame = [webView frame];
280
+ int angle = 0;
281
+ switch (fromInterfaceOrientation) {
282
+ case UIInterfaceOrientationPortrait: {
283
+ switch ([self interfaceOrientation]) {
284
+ case UIInterfaceOrientationLandscapeLeft: {
285
+ angle = 90;
286
+ }
287
+ break;
288
+ case UIInterfaceOrientationPortraitUpsideDown: {
289
+ angle = 180;
290
+ }
291
+ break;
292
+ case UIInterfaceOrientationLandscapeRight: {
293
+ angle = -90;
294
+ }
295
+ break;
296
+ }
297
+ }
298
+ break;
299
+ case UIInterfaceOrientationLandscapeLeft: {
300
+ switch ([self interfaceOrientation]) {
301
+ case UIInterfaceOrientationPortrait: {
302
+ angle = -90;
303
+ }
304
+ break;
305
+ case UIInterfaceOrientationPortraitUpsideDown: {
306
+ angle = 90;
307
+ }
308
+ break;
309
+ case UIInterfaceOrientationLandscapeRight: {
310
+ angle = 180;
311
+ }
312
+ break;
313
+ }
314
+ }
315
+ break;
316
+ case UIInterfaceOrientationPortraitUpsideDown: {
317
+ switch ([self interfaceOrientation]) {
318
+ case UIInterfaceOrientationPortrait: {
319
+ angle = 180;
320
+ }
321
+ break;
322
+ case UIInterfaceOrientationLandscapeLeft: {
323
+ angle = -90;
324
+ }
325
+ break;
326
+ case UIInterfaceOrientationLandscapeRight: {
327
+ angle = 90;
328
+ }
329
+ break;
330
+ }
331
+ }
332
+ break;
333
+ case UIInterfaceOrientationLandscapeRight: {
334
+ switch ([self interfaceOrientation]) {
335
+ case UIInterfaceOrientationPortrait: {
336
+ angle = 90;
337
+ }
338
+ break;
339
+ case UIInterfaceOrientationLandscapeLeft: {
340
+ angle = 180;
341
+ }
342
+ break;
343
+ case UIInterfaceOrientationPortraitUpsideDown: {
344
+ angle = -90;
345
+ }
346
+ break;
347
+ }
348
+ }
349
+ break;
350
+ }
351
+ if (([self interfaceOrientation] == UIInterfaceOrientationLandscapeLeft) || ([self interfaceOrientation] == UIInterfaceOrientationLandscapeRight)) {
352
+ int t = width;
353
+ width = height;
354
+ height = t;
355
+ }
356
+ //rho_rhodesapp_callScreenRotationCallback((int)wFrame.size.width, (int)wFrame.size.height, angle);
357
+ rho_rhodesapp_callScreenRotationCallback(width, height, angle);
358
+ }
359
+
360
+
361
+
362
+ - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
363
+ // custom rotation code based on interfaceOrientation here...
364
+ return YES;
365
+ }
366
+
367
+
250
368
  - (id)initWithParentView:(UIView *)p frame:(CGRect)frame toolbar:(NSArray*)items {
251
369
  return [self init:p webView:nil frame:frame toolbar:items];
252
370
  }
@@ -255,22 +373,21 @@
255
373
  return [self initWithParentView:p frame:frame toolbar:nil];
256
374
  }
257
375
 
258
- - (id)initWithMainView:(id<RhoMainView>)v {
259
- return [self initWithMainView:v toolbar:nil];
376
+ - (id)initWithMainView:(id<RhoMainView>)v parent:(UIWindow*)p {
377
+ return [self initWithMainView:v parent:p toolbar:nil];
260
378
  }
261
379
 
262
- - (id)initWithMainView:(id<RhoMainView>)v toolbar:(NSArray*)items {
263
- UIView *p = [v parent];
380
+ - (id)initWithMainView:(id<RhoMainView>)v parent:(UIWindow*)p toolbar:(NSArray*)items {
264
381
  CGRect frame = [[v view] frame];
265
382
  //UIWebView *w = (UIWebView*)[Rhodes subviewWithTag:RHO_TAG_WEBVIEW ofView:[v view]];
266
383
  UIWebView *w = [v detachWebView];
267
- return [self init:p webView:w frame:frame toolbar:items];
384
+ id result = [self init:p webView:w frame:frame toolbar:items];
385
+
268
386
  }
269
387
 
270
388
  - (void)didReceiveMemoryWarning {
271
389
  // Releases the view if it doesn't have a superview.
272
390
  [super didReceiveMemoryWarning];
273
-
274
391
  // Release any cached data, images, etc that aren't in use.
275
392
  }
276
393
 
@@ -279,8 +396,9 @@
279
396
  }
280
397
 
281
398
  - (void)dealloc {
282
- [root removeFromSuperview];
283
- [root release];
399
+ //UIView* root = self.view;
400
+ //[root removeFromSuperview];
401
+ //[root release];
284
402
  [super dealloc];
285
403
  }
286
404
 
@@ -308,15 +426,6 @@
308
426
  [self reload:0];
309
427
  }
310
428
 
311
- // RhoMainView implementation
312
-
313
- - (UIView*)view {
314
- return root;
315
- }
316
-
317
- - (UIView*)parent {
318
- return parent;
319
- }
320
429
 
321
430
  - (UIWebView*)detachWebView {
322
431
  UIWebView *w = [webView retain];
@@ -384,6 +493,23 @@
384
493
  return 0;
385
494
  }
386
495
 
496
+ - (void)addNavBar:(UINavigationBar*)navb {
497
+ [navbar removeFromSuperview];
498
+ navbar = navb;
499
+ navbar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
500
+ navbar.autoresizesSubviews = YES;
501
+
502
+ UIView* root = self.view;
503
+ [root addSubview:navbar];
504
+ [navbar release];
505
+
506
+ CGRect nFrame = navbar.frame;
507
+ CGRect wFrame = webView.frame;
508
+ wFrame.origin.y += nFrame.size.height;
509
+ wFrame.size.height -= nFrame.size.height;
510
+ webView.frame = wFrame;
511
+ }
512
+
387
513
  - (void)addNavBar:(NSString*)title left:(NSArray*)left right:(NSArray*)right {
388
514
  [self removeNavBar];
389
515
 
@@ -411,15 +537,8 @@
411
537
  }
412
538
 
413
539
  [nb pushNavigationItem:ni animated:NO];
414
- [navbar removeFromSuperview];
415
- navbar = nb;
416
- [root addSubview:navbar];
417
-
418
- CGRect nFrame = navbar.frame;
419
- CGRect wFrame = webView.frame;
420
- wFrame.origin.y += nFrame.size.height;
421
- wFrame.size.height -= nFrame.size.height;
422
- webView.frame = wFrame;
540
+
541
+ [self addNavBar:nb];
423
542
  }
424
543
 
425
544
  - (void)removeNavBar {
@@ -10,7 +10,6 @@
10
10
  #import "RhoMainView.h"
11
11
 
12
12
  @interface TabbedMainView : UIViewController<RhoMainView> {
13
- UIView *parent;
14
13
  UITabBarController *tabbar;
15
14
  NSArray *tabbarData;
16
15
  }
@@ -18,8 +17,7 @@
18
17
  @property (nonatomic,retain) UITabBarController *tabbar;
19
18
  @property (nonatomic,retain) NSArray *tabbarData;
20
19
 
21
- //- (id)initWithParentView:(UIView*)v items:(NSArray*)items;
22
- //- (id)initWithParentView:(UIView*)v frame:(CGRect)frame items:(NSArray*)items;
23
- - (id)initWithMainView:(id<RhoMainView>)v tabs:(NSArray*)items;
20
+ - (id)initWithMainView:(id<RhoMainView>)v parent:(UIWindow*)p tabs:(NSArray*)items;
21
+ - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;
24
22
 
25
23
  @end
@@ -54,13 +54,16 @@
54
54
 
55
55
  @synthesize tabbar, tabbarData;
56
56
 
57
- //- (id)initWithParentView:(UIView *)v items:(NSArray *)items {
58
- // return [self initWithParentView:v frame:v.frame items:items];
59
- //}
60
57
 
61
- //- (id)initWithParentView:(UIView *)v frame:(CGRect)frame items:(NSArray*)items {
62
- - (id)initWithMainView:(id<RhoMainView>)v tabs:(NSArray *)items {
63
- parent = [v parent];
58
+
59
+ - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
60
+ // custom rotation code based on interfaceOrientation here...
61
+ return YES;
62
+ }
63
+
64
+
65
+ - (id)initWithMainView:(id<RhoMainView>)v parent:(UIWindow*)p tabs:(NSArray *)items {
66
+ UIView* parent = p;
64
67
 
65
68
  CGRect frame = [[v view] frame];
66
69
 
@@ -132,8 +135,10 @@
132
135
  }
133
136
 
134
137
  - (void)dealloc {
135
- [tabbar.view removeFromSuperview];
138
+ //[tabbar.view removeFromSuperview];
136
139
  [tabbarData release];
140
+ [tabbar release];
141
+ tabbar = nil;
137
142
  [super dealloc];
138
143
  }
139
144
 
@@ -151,9 +156,6 @@
151
156
  return tabbar.view;
152
157
  }
153
158
 
154
- - (UIView*)parent {
155
- return parent;
156
- }
157
159
 
158
160
  - (UIWebView*)detachWebView {
159
161
  return [[self subView:[self activeTab]] detachWebView];