1

次のコードを検討してください。

CGFloat largerLineSpacing = kStreamCellParagraphSpacing;

CTParagraphStyleSetting paragraphSettings[1] = {
    { kCTParagraphStyleSpecifierParagraphSpacing, sizeof(CGFloat), &largerLineSpacing }
};
CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(paragraphSettings, sizeof(*paragraphSettings));

このコードは、iPad 1 (5.1) で実行すると EXC_BAD_ACCESS でクラッシュしますが、5.1 シミュレーターまたは iPad 3 (6.0) ではクラッシュしません。私の C は弱いです - sizeof でばかげた間違いをしていますか?

4

2 に答える 2

2

CTParagraphStyleCreateのドキュメントは、その 2 番目の引数が、配列のバイト単位のサイズではなくCTParagraphStyleSetting、配列内のインスタンスの数 (この場合は 1) を与えることを示唆しています。paragraphSettings

コードを次のように変更すると

CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(paragraphSettings, 1);

それはうまくいくはずです。または、将来さらに設定を追加することに対処したい場合は、試してみることができます

int numElems = sizeof(paragraphSettings)/sizeof(paragraphSettings[0]);
CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(paragraphSettings,
                                                            numElems);
于 2012-10-29T16:28:54.003 に答える
1

static CFIndex const settingCount = 1;

CTParagraphStyleSetting paragraphSettings[settingCount] = {
    { kCTParagraphStyleSpecifierParagraphSpacing, sizeof(CGFloat), &largerLineSpacing }
};

CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(paragraphSettings, settingCount);
于 2012-10-29T16:32:06.677 に答える