我一直在为新游戏创建一个对等连接,不使用对等选择器.然而,我对这里的内容感到愚蠢:
- (void)session:(GKSession *)session didReceiveConnectionRequestFromPeer:(NSString *)peerID {
NSLog(@"I GOTS A CONNECTION REQUEST");
if(connected == YES) {
//deny all requests
}
else if(connected == NO) {
[session acceptConnectionFromPeer:peerID error:???];
}
}
Run Code Online (Sandbox Code Playgroud)
我应该把问号放在哪里?文档说NSError**.
出于某种原因,当我执行操作时,如果没有错误,我会收到错误NSURLConnection.
NSLog(@"Sending string to server. ID:11118");
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"Response from server received. ID:11119");
NSString *responseString = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
if (&error)
{
//Handle Error
NSLog(@"Error getting a server response! (scm) Error %i: %@", [error code], [error localizedDescription]);
UIAlertView *theAlert = [[UIAlertView alloc]initWithTitle:@"Error getting a server response!" message:[NSString stringWithFormat:@"Error %i: %@", [error code], [error localizedDescription]] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[theAlert show];
}
Run Code Online (Sandbox Code Playgroud)
是表示用警告[error code]显示0和[error localizedDescription]表现Null.
有任何想法吗?
我在两天前运行正常的一些代码上收到错误.错误是:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType extent]: unrecognized selector sent to instance 0x1bc8f0'
Run Code Online (Sandbox Code Playgroud)
它指向main.m上的这一行:
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
Run Code Online (Sandbox Code Playgroud)
使用日志来查看我的代码到达的位置似乎这行引发了错误:
greySave = [context createCGImage:greyscaleImage fromRect:[greyscaleImage extent]];
Run Code Online (Sandbox Code Playgroud)
greySave是一个CGImageRef,在我的视图控制器的开头声明.抓取CIImage输出并将其转换为CGImageRef进行保存非常简单:
desaturate = [CIFilter filterWithName:@"CIColorMonochrome" keysAndValues:kCIInputImageKey, colourSave, @"inputIntensity", [NSNumber numberWithFloat:0.00], nil];
greyscaleImage = [desaturate valueForKey:@"outputImage"];
greySave = [context createCGImage:greyscaleImage fromRect:[greyscaleImage extent]];
Run Code Online (Sandbox Code Playgroud)
我认为唯一改变的东西(虽然不明白为什么)可能导致问题是添加一个额外的条件语句,这将应用第二个过滤器是用户希望这样做:
if ([_alphaButtonSavedState isEqualToString:@"ON"]) {
NSLog(@"user does want alpha on greyscale");
//user wants alpha mask also
} else {
NSLog(@"user does not want alpha on greyscale");
//convert …Run Code Online (Sandbox Code Playgroud) 我通过引用在线找到的一些代码传递了一个错误.该错误作为空对象返回,意味着没有错误.
如果我检查error.code我得到一个糟糕的访问,因为该对象是空的.
如果我检查error == nil我得到一个假,因为error是一个空对象.
如何使用逻辑来查找错误,但是为空?
我使用下面的方法从URL获取数据,但是如果statusCode不等于200 ,我想让它返回错误.
+ (NSData *)getData:(NSString *) url {
NSURL *urlNS = [[NSURL alloc] initWithString:url];
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:urlNS];
NSError * error = nil;
NSHTTPURLResponse* urlResponse = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&urlResponse error:&error];
int statusCode = [urlResponse statusCode];
if(statusCode == 200) {
return data;
} else {
//return the error object which is not NSData or which is converted to NSData
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题
我可以以某种方式在非NSData对象中返回我的错误(它将是上面定义的错误变量),或者我可以将我的错误转换为NSData吗?
在以下代码NSError实例化(匹配是GameCenter的GKMatch):
...
NSString * deviceID = appDelegate.deviceID;
MessageWithDeviceID message;
message.message.messageType = kMessageTypeDeviceID;
const char* const deviceIDAsUTF8 = deviceID.UTF8String;
for (size_t idx=0;idx<32;idx++)
message.deviceID[idx] = deviceIDAsUTF8[idx];
NSData *data = [NSData dataWithBytes:&message length:sizeof(message)];
NSError * error;
[match sendDataToAllPlayers:data withDataMode:GKMatchSendDataReliable error:&error];
data = nil;
if (error)
NSLog(@"An error is occured: %@",error);
...
Run Code Online (Sandbox Code Playgroud)
但应用程序崩溃在最后显示的行与EXC_BAD_ACCESS或SIGABRT -[NSCFString userInfo (or domain, localizedDescription, code etc)] unrecognized selector sent to instance 0x....所以我可以看到错误不是nil并且它是实例化的对象但我无法从中获取任何信息.我试图得到以下内容:
[error localizedDescription];
[error domain];
[error code];
[error description];
etc.
Run Code Online (Sandbox Code Playgroud)
但NSLog无论我想要获得哪些信息,应用程序仍会在线路上崩溃.我知道这种方法是不对的,我需要使用 …
它是在编写Objective-c方法时添加错误输出参数的常见模式.
据我所知,这是如何创建一个方法,如果出错,返回错误:
- (void)doSomethingWithObj:(id)obj error:(NSError *__autoreleasing *)error {
BOOL success = NO;
// do somthing...
if (!success) {
*error = [NSError errorWithDomain:@"the.domain" code:0 userInfo:nil];
}
}
Run Code Online (Sandbox Code Playgroud)
现在有时你只想要这个错误参数来反映你在方法中使用的其他方法中发生的错误,让我们说:
- (void)fetchObjectInContext:(NSManagedObjectContext *)context error:(NSError *__autoreleasing *)error {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SomeObject"];
NSArray *results = [context executeFetchRequest:request error:nil];
}
Run Code Online (Sandbox Code Playgroud)
所以我认为好,我只是将error参数传递给inside方法,如下所示:
- (void)fetchObjectInContext:(NSManagedObjectContext *)context error:(NSError *__autoreleasing *)error {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SomeObject"];
NSArray *results = [context executeFetchRequest:request error:error];
if (error) {
NSLog(@"error %@", error);
}
}
Run Code Online (Sandbox Code Playgroud)
但这种方法有两个问题:
1.即使没有错误,if (error)检查YES也会返回. …