macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

encodeCGPoint:forKey:

-(void)encodeCGPoint:(CGPoint)point
          forKey:(NSString *)key

解説

`encodeCGPoint:forKey:` メソッドは、`NSKeyedArchiver` や `NSCoder` を使って `CGPoint` 構造体をエンコードする際に使用されます。以下に、`CGPoint` をエンコードおよびデコードするための Objective-C のサンプルコードを示します。

このサンプルでは、`CGPoint` をプロパティとして持つカスタムクラス `MyClass` を作成し、そのインスタンスエンコードとデコードする方法を示します。

```objective-c

#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>

@interface MyClass : NSObject <NSCoding>

@property (nonatomic) CGPoint point;

- (instancetype)initWithPoint:(CGPoint)point;

@end

@implementation MyClass

- (instancetype)initWithPoint:(CGPoint)point {
    self = [super init];
    if (self) {
        _point = point;
    }
    return self;
}

// エンコードメソッド
- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeCGPoint:self.point forKey:@"point"];
}

// デコードメソッド
- (instancetype)initWithCoder:(NSCoder *)coder {
    self = [super init];
    if (self) {
        _point = [coder decodeCGPointForKey:@"point"];
    }
    return self;
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // CGPointを持つMyClassのインスタンスを作成
        CGPoint myPoint = CGPointMake(10.0, 20.0);
        MyClass *myObject = [[MyClass alloc] initWithPoint:myPoint];
        
        // オブジェクトをエンコード
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myObject requiringSecureCoding:NO error:nil];
        
        // データをデコード
        MyClass *decodedObject = [NSKeyedUnarchiver unarchivedObjectOfClass:[MyClass class] fromData:data error:nil];
        
        // 結果を出力
        NSLog(@"Original CGPoint: (%.2f, %.2f)", myObject.point.x, myObject.point.y);
        NSLog(@"Decoded CGPoint: (%.2f, %.2f)", decodedObject.point.x, decodedObject.point.y);
    }
    return 0;
}

```

### 説明:
1. **MyClass**: `CGPoint` をプロパティとして持つクラスを定義します。このクラスは `NSCoding` プロトコルに準拠しています。
2. **encodeWithCoder:**: `CGPoint` をエンコードするために `encodeCGPoint:forKey:` メソッドを使用しています。
3. **initWithCoder:**: デコード時に `decodeCGPointForKey:` メソッドを使用して、エンコードした `CGPoint` を復元します。
4. **main**: `MyClass` のインスタンスを作成し、エンコードしてからデコードする一連の流れを示しています。

このコードを実行すると、オリジナルの `CGPoint` とデコード後の `CGPoint` が一致することが確認できます。

返り値

( void )

引数

( CGPoint )point
( NSString * )key

クラス

NSCoder UIKit Additions

Instance Methods

使用可能

iPhone2.0

参照

例文