我想我会在这个问题上难倒所有人。
我有一个 iOS 项目,它有两种进入应用程序的方式(见图)。
- 打开屏幕---->登录(电子邮件/密码)视图----->主视图
- 打开屏幕 ----> 注册视图 -----> 创建配置文件 -----> 输入安全代码视图 -----> 主视图
#1 路径永远不会失败,并且该应用程序运行良好。
第二个(#2)不是那么多!使用路径#2,一旦用户进入 MainView,我将“findClosest”称为完美运行的 restkit 调用。第二次调用“findClosest”时,它变成了蒸汽,这意味着成功和失败的块永远不会被调用。我已经运行了 charles 并且调用正在访问服务器并返回,但是从不调用成功或失败块?然后每次连续调用“findClosest”都会变成蒸汽。
如果我关闭应用程序并重新启动,用户会通过上面的路径 #1,并且应用程序可以完美运行(又名 findClosest)。
===这里是“findClosest”方法==================================
-(void)findClosestThingWithIn:(NSNumber *)distance
latitude:(NSNumber *)lat
longitude:(NSNumber *)lng
limitTo:(NSNumber *)limit
type:(NSString*)thingType
{
//Setting these in here if NOT passed in as we have locationManager in restengine
if(nil == lat || nil == lng) {
//TODO: uncomment this.
lat = [NSNumber numberWithDouble:self.locationManager.location.coordinate.latitude];
lng = [NSNumber numberWithDouble:self.locationManager.location.coordinate.longitude];
}
NSAssert(lat, @"Cannot find an Thing without a lat");
NSAssert(lng, @"Cannot find an Thing without a lng");
NSAssert(self.accessToken, "TOken cannot be nil");
NSAssert(self.api_key, "TOken cannot be nil");
if(nil == lat || nil == lng) {
return;
}
if(self.accessToken && self.api_key) {
//Delete all previous things as we always want a fresh list
// [self performSelectorOnMainThread:@selector(deleteAllObjectsWithEntityName:) withObject:@"Thing" waitUntilDone:NO];
//[self deleteAllObjectsWithEntityName:@"Thing"];
RKObjectManager *mgr = [RKObjectManager sharedManager];
[mgr getObject:nil
path:@"v3/things/closest.json"
parameters:@{
@"auth_token" : self.accessToken,
@"api_key" : self.api_key,
@"lat" : ObjectOrNull(lat),
@"lng" : ObjectOrNull(lng),
@"max_distance" : ObjectOrNull(distance),
@"limit" : ObjectOrNull(limit),
@"type" : thingType
}
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
RKLogInfo(@"Find closest Things complete refresh view...");
[[NSNotificationCenter defaultCenter] postNotificationName:kFoundClosestThingss object:[NSNumber numberWithUnsignedInteger:[mappingResult count]] ];
if([mappingResult count] <= 0) {
[UIAlertView alertViewWithTitle:@"No available drivers" message:@"All thingss are currently busy. Please try again later."];
}
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {
RKLogError(@"Find closest Things failed with error: %@", error);
[UIAlertView alertViewWithTitle:@"unavailable" message:@"Error. x005"];
}];
DLog(@"");
}
DLog(@"");
}
==================================================== =======
我不确定问题是否是故事板的#2 路径和推送,因为这真的是唯一的代码差异?为了尝试解决这个问题,我将输入代码视图中的 segue 删除到 MainView,而是将它们发送回打开屏幕以使其采用 #1 所采用的路径,但是会发生同样的错误吗?
附加 Restkit 日志(您可以看到对 ...closest.json 的两次调用都成功),但从未调用成功块。
2013-06-10 12:07:40.138 StatMedical[22532:907] -[STOpeningScreenViewController introductionDidFinishWithType:] Did Finish Introduction By Skipping It
2013-06-10 12:08:08.835 StatMedical[22532:3813] I restkit.network:RKHTTPRequestOperation.m:154 POST 'http://my.herokuapp.com/v3/users.json'
2013-06-10 12:08:09.839 StatMedical[22532:611b] I restkit.network:RKHTTPRequestOperation.m:185 POST 'http://my.herokuapp.com/v3/users.json' (201 Created) [1.0041 s]
2013-06-10 12:08:09.863 StatMedical[22532:907] I app:STRestEngine.m:1328 Load complete refresh view...
2013-06-10 12:08:22.931 StatMedical[22532:3c3b] I restkit.network:RKHTTPRequestOperation.m:154 POST 'http://my.herokuapp.com/v3/users/approve_by_code.json'
2013-06-10 12:08:23.054 StatMedical[22532:611b] I restkit.network:RKHTTPRequestOperation.m:185 POST 'http://my.herokuapp.com/v3/users/approve_by_code.json' (201 Created) [0.1224 s]
2013-06-10 12:08:23.074 StatMedical[22532:3c3b] I restkit.network:RKHTTPRequestOperation.m:154 POST 'http://my.herokuapp.com/v3/sessions/login.json'
2013-06-10 12:08:23.495 StatMedical[22532:611b] I restkit.network:RKHTTPRequestOperation.m:185 POST 'http://my.herokuapp.com/v3/sessions/login.json' (201 Created) [0.4213 s]
2013-06-10 12:08:23.514 StatMedical[22532:907] __61-[STRestEngine getSessionWithEmail:password:success:failure:]_block_invoke Mapped the session: <Session: 0x1dc73790>
2013-06-10 12:08:23.539 StatMedical[22532:907] __50-[STEnterCodeViewController tryToEstablishSession]_block_invoke Got a session!
2013-06-10 12:08:23.867 StatMedical[22532:907] -[STMainNavViewController mapView:regionDidChangeAnimated:] The location is <+17.69808269,-39.99999000> +/- 0.00m (speed -1.00 mps / course -1.00) @ 6/10/13, 12:08:23 PM Eastern Daylight Time
2013-06-10 12:08:23.905 StatMedical[22532:907] -[STMainNavViewController mapView:regionDidChangeAnimated:] The location is <+17.69808269,-39.99999000> +/- 0.00m (speed -1.00 mps / course -1.00) @ 6/10/13, 12:08:23 PM Eastern Daylight Time
2013-06-10 12:08:23.974 StatMedical[22532:907] -[STMainNavViewController mapView:regionDidChangeAnimated:] The location is <+37.17818069,-96.05457069> +/- 0.00m (speed -1.00 mps / course -1.00) @ 6/10/13, 12:08:23 PM Eastern Daylight Time
2013-06-10 12:08:25.877 StatMedical[22532:907] -[STMainNavViewController mapView:regionDidChangeAnimated:] The location is <+39.95912667,-75.15170666> +/- 0.00m (speed -1.00 mps / course -1.00) @ 6/10/13, 12:08:25 PM Eastern Daylight Time
2013-06-10 12:08:27.876 StatMedical[22532:3c3b] __47-[STMainNavViewController findNearByThings]_block_invoke app delegate is <STAppDelegate: 0x1c585490>
2013-06-10 12:08:27.885 StatMedical[22532:3c3b] -[STRestEngine findClosestThingsWithIn:latitude:longitude:limitTo:type:]
2013-06-10 12:08:27.886 StatMedical[22532:3c3b] -[STRestEngine findClosestThingsWithIn:latitude:longitude:limitTo:type:]
2013-06-10 12:08:27.889 StatMedical[22532:3c3b] I restkit.network:RKHTTPRequestOperation.m:154 GET 'http://my.herokuapp.com/v3/Things/closest.json?api_key=ABC&auth_token=MZNYg9v8ccHssJ6WbSSy&lat=39.95912667093674&limit=15&lng=-75.15170666043032&max_distance=20&type=ALS'
2013-06-10 12:08:27.997 StatMedical[22532:611b] I restkit.network:RKHTTPRequestOperation.m:185 GET 'http://my.herokuapp.com/v3/Things/closest.json?api_key=ABC&auth_token=MZNYg9v8ccHssJ6WbSSy&lat=39.95912667093674&limit=15&lng=-75.15170666043032&max_distance=20&type=ALS' (200 OK) [0.1074 s]
2013-06-10 12:08:28.892 StatMedical[22532:907] I app:STRestEngine.m:901 Find closest Things complete refresh view...
2013-06-10 12:08:28.904 StatMedical[22532:907] -[STMainNavViewController updateETALabel:]
2013-06-10 12:08:28.905 StatMedical[22532:907] -[STMainNavViewController handleFoundThings:]
2013-06-10 12:08:50.371 StatMedical[22532:907] self.mode is currently 0
2013-06-10 12:08:50.373 StatMedical[22532:907] self.mode is now set to 1
2013-06-10 12:08:50.373 StatMedical[22532:907] self.mode is now permanently set to 1
2013-06-10 12:08:50.378 StatMedical[22532:3c3b] __47-[STMainNavViewController findNearByThings]_block_invoke app delegate is <STAppDelegate: 0x1c585490>
2013-06-10 12:08:50.389 StatMedical[22532:3c3b] -[STRestEngine findClosestThingsWithIn:latitude:longitude:limitTo:type:]
2013-06-10 12:08:50.390 StatMedical[22532:3c3b] -[STRestEngine findClosestThingsWithIn:latitude:longitude:limitTo:type:]
2013-06-10 12:08:50.394 StatMedical[22532:8337] I restkit.network:RKHTTPRequestOperation.m:154 GET 'http://my.herokuapp.com/v3/Things/closest.json?api_key=ABC&auth_token=MZNYg9v8ccHssJ6WbSSy&lat=39.95912667093674&limit=15&lng=-75.15170666043032&max_distance=20&type=BLS'
2013-06-10 12:08:50.737 StatMedical[22532:611b] I restkit.network:RKHTTPRequestOperation.m:185 GET 'http://my.herokuapp.com/v3/Things/closest.json?api_key=ABC&auth_token=MZNYg9v8ccHssJ6WbSSy&lat=39.95912667093674&limit=15&lng=-75.15170666043032&max_distance=20&type=BLS' (200 OK) [0.3432 s]
// 更新 ////// 所以我删除了 VERIFY ACCOUNT 和 MainView 之间的 segue。现在我有一个额外的按钮,因此一旦您在 VERIFY ACCOUNT 视图中提交代码,您就会看到显示“开始使用”的新按钮。单击它会展开转回 SIGN IN 视图。所以现在当这个动作被执行时 MainView 加载,但是 MainView 的 dealloc 被调用了?
想知道这整个问题是否是因为导航控制器问题?这是我的应用程序的完整介绍。