こんにちはー!ニアです。
本日、すぱこみっく!ユニバース及びすぱーダの最新バージョンをリリースしました。
1. アップデート内容
- すぱこみっく!ユニバース : Ver. 1.2.3 → Ver. 1.2.5
- すぱーダ : Ver. 1.0.5 → Ver. 1.0.8
- エクすぱーダ : Ver. 1.0.2 → Ver. 1.0.8
- ユニすぱーダ : Ver. 1.0.2 → Ver. 1.0.8
すぱこみっく!ユニバースでは、主にパフォーマンスの改善です。
コミックビューのページとアプリ設定のページを破棄した時に、対応するViewModelがメモリ上に残り続けるバグがあったので、それを修正しました。
なお、この修正はアイコンフォントこれくしょんの最新バージョン(Ver. 1.2.4)にも施しています。
すぱーダでは、すぱこーRSSフィードの各話のデータを格納するSpacoRSSItemクラスに、引数付き及びコピーコンストラクターを追加しました。
// 引数付きコンストラクター
public SpacoRSSItem(
string title = default( string ), string author = default( string ), string link = default( string ), DateTime pubDate = default( DateTime ),
string description = default( string ), int volume = default( int ), DateTime modifiedDate = default( DateTime ), bool isAvailable = default( bool ),
string mediaURL = default( string ), string thumbnailURL = default( string ), string id = default( string ) ) {
Title = title;
Author = author;
Link = link;
PubDate = pubDate;
Description = description;
Volume = volume;
ModifiedDate = modifiedDate;
IsAvailable = isAvailable;
MediaURL = mediaURL;
ThumbnailURL = thumbnailURL;
ID = id;
}
// コピーコンストラクター
protected SpacoRSSItem( SpacoRSSItem item )
: this(
title: item?.Title, author: item?.Author, link: item?.Link, pubDate: item?.PubDate ?? default( DateTime ),
description: item?.Description, volume: item?.Volume ?? default( int ), modifiedDate: item?.ModifiedDate ?? default( DateTime ), isAvailable: item?.IsAvailable ?? default( bool ),
mediaURL: item?.MediaURL, thumbnailURL: item?.ThumbnailURL, id: item?.ID
) {
}
後者は、派生クラスでSpacoRSSItemを引数に初期化するコンストラクターを定義する時、SpacoRSSItemの分を基底クラスのコンストラクターに任せることで、メンバーの初期化が派生クラスで追加したものだけで済むようになります。
public class DerivedSpacoRSSItemOld : SpacoRSSItem {
public string Addtion { get; set; }
public DerivedSpacoRSSItemOld( string addtion = "", SpacoRSSItem item )
: base() {
Addtion = addtion;
if( item != null ) {
Title = item.Title;
Description = item.Description;
Author = item.Author;
PubDate = item.PubDate;
Link = item.Link;
ModifiedDate = item.ModifiedDate;
Volume = item.Volume;
IsAvailable = item.IsAvailable;
MediaURL = item.MediaURL;
ThumbnailURL = item.ThumbnailURL;
ID = item.ID;
}
}
}
// ↓
public class DerivedSpacoRSSItemNew : SpacoRSSItem {
public string Addtion { get; set; }
public DerivedSpacoRSSItemNew( string addtion = "", SpacoRSSItem item )
: base( item ) {
Addtion = addtion;
}
}
2. すぱこみっく!ユニバースVer. 1.2.4及びすぱーダVer. 1.0.6での不具合について
実はVer. 1.2.5のリリース前に、Ver. 1.2.4を提出していたのですが、すぱこーRSSフィードの取得や表示ができないという、コンテンツとして重大な不具合がありました。
この不具合は、すぱこみっく!ユニバースで使用している、ユニすぱーダ Ver. 1.0.6で新規に追加したコピーコンストラクターでの初期化ミスが原因でした。
C#では、コンストラクターから別のコンストラクターを呼び出す時は、以下のようにコンストラクター初期化子(以下のコードの12行目にあるthisキーワードの部分)を使用します。
// 間違った方法
protected SpacoRSSItem( SpacoRSSItem item )
new SpacoRSSItem (
title: item?.Title, author: item?.Author, link: item?.Link, pubDate: item?.PubDate ?? default( DateTime ),
description: item?.Description, volume: item?.Volume ?? default( int ), modifiedDate: item?.ModifiedDate ?? default( DateTime ), isAvailable: item?.IsAvailable ?? default( bool ),
mediaURL: item?.MediaURL, thumbnailURL: item?.ThumbnailURL, id: item?.ID
);
}
// 正しい方法
protected SpacoRSSItem( SpacoRSSItem item )
: this(
title: item?.Title, author: item?.Author, link: item?.Link, pubDate: item?.PubDate ?? default( DateTime ),
description: item?.Description, volume: item?.Volume ?? default( int ), modifiedDate: item?.ModifiedDate ?? default( DateTime ), isAvailable: item?.IsAvailable ?? default( bool ),
mediaURL: item?.MediaURL, thumbnailURL: item?.ThumbnailURL, id: item?.ID
) {
}
間違った方法の場合、コンストラクター内で有効なローカルなインスタンスを生成しているだけで、そもそもメンバーを初期化していない(厳密に言えば規定値で初期化している)のです。(コピーコンストラクターの意味ナス)
そのため、派生クラスでコピーコンストラクターを利用していたすぱこみっく!ユニバース Ver. 1.2.4では、RSSフィードのリストが正しく生成できていませんでした。
ただし、WebからRSSフィードを取得していた場合、ローカルファイルに書き込む前にエラーが発生するので、Ver. 1.2.3以前でローカルに保存済みのRSSフィードのデータには影響がありません。Ver. 1.2.5へアップデートすることで、そのデータを再び読み込むことができます。
現在では、その不具合を修正したバージョンがリリースされています。もし、すぱこみっく!ユニバースVer. 1.2.4及びすぱーダVer. 1.0.6をお持ちの方はお手数ですが、最新バージョンにアップデートをお願いします。
- すぱこみっく!ユニバース : Ver 1.2.5をストアにリリースし、Ver. 1.2.4を置き換え
- スパーダ : Ver. 1.0.8をNuGetギャラリーにリリースし、Ver. 1.0.6は削除
すぱこみっく!ユニバース及びすぱーダをご利用の方には、ご不便をおかけしたことをお詫び申し上げます。
なお、アイコンフォントこれくしょんに関しては、本不具合はありませんでした。
3. おわりに
何ともあれ、当日中にアプリの不具合を解決できてよかったです。
すぱこみっく!ユニバース Ver. 1.2.5では、Ver. 1.2.4を即急に置き換えるため、ユニすぱーダをVer. 1.0.2にロールバックしてリリースしましたが、最新バージョンのVer. 1.0.8でRSSフィードのリストを正しく生成できることを確認しました。次期バージョンからは新バージョンのユニすぱーダを入れようと思います。
それでは、See you next!
コメント