我正在尝试在cocos2d中编写一个基本测试"游戏状态"单例,但由于某些原因加载应用程序时,从不调用initWithCoder.任何帮助将不胜感激,谢谢.
这是我的单身GameState.h:
#import "cocos2d.h"
@interface GameState : NSObject <NSCoding>
{
NSInteger level, score;
Boolean seenInstructions;
}
@property (readwrite) NSInteger level;
@property (readwrite) NSInteger score;
@property (readwrite) Boolean seenInstructions;
+(GameState *) sharedState;
+(void) loadState;
+(void) saveState;
@end
Run Code Online (Sandbox Code Playgroud)
...和GameState.m:
#import "GameState.h"
#import "Constants.h"
@implementation GameState
static GameState *sharedState = nil;
@synthesize level, score, seenInstructions;
-(void)dealloc {
[super dealloc];
}
-(id)init {
if(!(self = [super init]))
return nil;
level = 1;
score = 0;
seenInstructions = NO;
return self;
}
+(void)loadState {
@synchronized([GameState …Run Code Online (Sandbox Code Playgroud) singleton nskeyedarchiver cocos2d-iphone nsdata iphone-sdk-3.0
我缩小了这个错误(崩溃我的应用程序):
-[NSConcreteMutableData release]: message sent to deallocated instance 0x6eaed40
Run Code Online (Sandbox Code Playgroud)
到以下代码:
emailData = [kmlDoc dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚为什么会出现这个错误?该行只是将一个非常大的字符串设置为NSData对象.我在dealloc方法中发布了emailData.
这里出了什么问题?
我正在努力将图像数据从文件转码为base64编码的字符串,然后在使用NSStream读取文件时返回字节.我想我差不多了,但是在转换过程中我在各个点继续遇到EXC_BAD_ACCESS.
我对NSStream和缓冲区的世界相当新,所以如果我采取绝对错误的方法,请随时告诉我.
这是我到目前为止所得到的:
// Copy the bytes from our file input stream buffer
void *base64buffer = malloc(self.buffer[self.bufferOffset]);
// Convert the bytes to NSData for the base64 encode
NSData *dataToEncode = [NSData dataWithBytesNoCopy:base64buffer length:sizeof(base64buffer) freeWhenDone:YES];
// Convert our NSData into a base64 encoded string
NSString *base64EncodedData = [dataToEncode base64EncodedString];
// Convert our base64 encoded string back into NSData
NSData *encodedData = [base64EncodedData dataUsingEncoding:NSUTF8StringEncoding];
// Write the bytes to our output stream
bytesWritten = [self.producerStream write:[encodedData bytes] maxLength:[encodedData length]];
// Clean up …Run Code Online (Sandbox Code Playgroud) NSData *myRequest = [NSString stringWithFormat:(@"&site=%@&key=%@",tmpSite,tmpKey)];
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
谢谢
从来没有这样做(学校除外).所以我完全处于黑暗中.
我有数据(void*)和它的大小(UInt32)所以我可以简单地做类似的东西
[NSData dataWithBytesNoCopy:data length:dataSize freeWhenDone:YES]
Run Code Online (Sandbox Code Playgroud)
这是为了得到一个NSData实例(我需要),但我希望在1或2字节块中"切片"这个数据并反转它的顺序.
一个简短的例子会很棒.
谢谢.
我正在使用URLScheme,我需要将应用程序A中的序列化NSDictionary发送到我的应用程序B.
在应用程序A中,我使用NSKeyedArchiver将我的NSDictionary序列化为NSData
NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"This is value 1", @"key1",
@"value 2", @"key2",
@"value3", @"key3",
@"", @"key4",
@"value5", @"key5",
@"value 6", @"key6",
nil];
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:myDictionary];
[archiver finishEncoding];
[archiver release];
NSString *bytes = [[[NSString alloc] initWithData:data
encoding:NSASCIIStringEncoding] autorelease];
Run Code Online (Sandbox Code Playgroud)
在应用程序B中,我使用的是NSKeyedUnarchiver
NSData *data = [[NSString stringWithFormat:@"%@", val] dataUsingEncoding:NSASCIIStringEncoding];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSDictionary *myDictionary = [[unarchiver decodeObject] retain];
[unarchiver finishDecoding];
[unarchiver release];
Run Code Online (Sandbox Code Playgroud)
我的序列化NSDictionary看起来像:
bplist00Ô01T$ …
我制作了一个UIImage Objective C类别来容纳这个功能:
#import "UIImage+fixOrientation.h"
@implementation UIImage (fixOrientation)
- (UIImage *)fixOrientation
{
// No-op if the orientation is already correct
if (self.imageOrientation == UIImageOrientationUp) return self;
// We need to calculate the proper transformation to make the image upright.
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
CGAffineTransform transform = CGAffineTransformIdentity;
switch (self.imageOrientation) {
case UIImageOrientationDown:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
transform …Run Code Online (Sandbox Code Playgroud) 我有一个NSData对象,其中包含我需要的一些数据.我想要做的是找出数据"FF D8"的位置(JPEG数据的开始)
我怎样才能实现这样的工作?
我在XCode中有一个名为vvideo.mp4的文件.我试图将它转换为NSData,如下所示
NSData *data = [NSData dataWithContentsOfFile:@"vvideo.mp4" options:nil error:nil];
Run Code Online (Sandbox Code Playgroud)
但是当我记录数据时,它返回null.
什么是将任何视频转换为NSData的正确方法?
在Xcode中添加文件并正确复制,你可以在这里看到.
编辑问题....
我有一个NSData对象,将包含敏感数据.操作完成后,我想擦除内存以避免任何潜在的安全问题.在Objective-C中,这很容易.我可以打电话给...
memset([mySensitiveData bytes], 0, [mySensitiveData length]);
Run Code Online (Sandbox Code Playgroud)
然而,在Swift中,它并不那么简单.我尝试过相同的......
memset(mySensitiveData.bytes, 0, mySensitiveData.length)
Run Code Online (Sandbox Code Playgroud)
...但是,我收到编译错误说...
'UnsafePointer<Void>' is not convertible to 'UnsafeMutablePointer<Void>'
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题并在Swift中安全地擦除内存吗?谢谢!!